我正在寻找类似以下的代码:
```html
仅仅为了概述一个区别,这不是方法链的问题。而是当父类接收一个子类的泛型时,它不能再像上面的代码一样作为一个独立的类使用,因为用 "
我的目标:
我想要实现的是一个父类,在被扩展时,
我会使用一个泛型类型来告诉父类哪个子类调用了该函数,但是如果没有经历异常,我将无法再使用父类本身的对象。下面是一个例子:
```html
我正在寻找类似以下的代码:
```public class Parent<T is_or_extends Parent<T>> {
public T function() {
// do some stuff //
return correct();
}
public T correct() {
return (T) this;
}
}
这样做是为了让任何子类都可以访问其他父类函数,但仍然保持独立的类(不需要将function()的返回值向上转换为Parent实例)。 程序员也可以独立使用Parent类(因此可以创建Parent实例,而不需要将function()的返回对象向下转换)
实现:
public class Child extends Parent<Child> {}
使用方法:
Child child = new Child(); // ok
Parent<Child> polymorph = new Child(); // ok
Parent<Parent> parent = new Parent<Parent>(); // ERROR!
仅仅为了概述一个区别,这不是方法链的问题。而是当父类接收一个子类的泛型时,它不能再像上面的代码一样作为一个独立的类使用,因为用 "
extends
" 替换 "is_or_extends
" 后,"new Parent<Parent>()
" 将无法编译。我的目标:
我想要实现的是一个父类,在被扩展时,
function()
将返回一个子类的对象,而不是父类的对象。我会使用一个泛型类型来告诉父类哪个子类调用了该函数,但是如果没有经历异常,我将无法再使用父类本身的对象。下面是一个例子:
public static class Parent<T extends Parent<T>> {}
public static class Child extends Parent<Child> {}
public static void main(String[] args) {
// This will not compile as Parent cannot extend Parent
Parent<Parent> parent = new Parent<Parent>();
// This will work as Child extends Parent
Child child = new Child();
}
预先感谢您。
Parent<?> parent = new Parent<>();
- shmoselextends
确实意味着“是或扩展”。你的示例无法编译的原因是内部的Parent
是一个原始类型,它不能有效地替代T extends Parent<T>
。 - shmoselPet
实例(如果它不是抽象的),这是OP在这里提出的问题。 - shmosel