是否可以根据子类类型动态识别T作为返回类型? 我想要以下内容:
public class Parent {
public <T extends Parent> T foo() {
return (T)this;
}
}
public class Child extends Parent {
public void childMethod() {
System.out.println("childMethod called");
}
}
然后致电:
Child child = new Child();
child.foo().childMethod();
没有像这样定义类型:
Child child = new Child();
child.foo().<Child>childMethod(); // compiles fine
提前致谢!
答案 0 :(得分:4)
你想要这个:
public class Parent<T extends Parent<T>> {
public T foo() {
return (T)this;
}
}
public class Child extends Parent<Child> {
public void childMethod() {
System.out.println("childMethod called");
}
}
Child child = new Child();
child.foo().childMethod(); // compiles
答案 1 :(得分:0)
Parent
在Java类型系统中不可能引用this
的确切类。但是,它可以有一个类型参数(比如说T
),子类可以指定它们自己或其他类型(无论他们想要什么),并使用抽象方法委派获取实例的任务键入T
到子类。
public abstract class Parent<T> {
// the implementer is responsible for how to get an instance of T
public abstract T getT();
// in this case, foo() is kind of redundant
public T foo() {
return getT();
}
}
public class Child extends Parent<Child> {
public Child getT() {
return this;
}
public void childMethod() {
System.out.println("childMethod called");
}
}
Child child = new Child();
child.foo().childMethod(); // compiles