根据Java中的子类Type定义泛型类父类方法

cha*_*ean 6 java generics subclassing

是否可以根据子类类型动态识别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");
        }
}
Run Code Online (Sandbox Code Playgroud)

然后致电:

Child child = new Child();
child.foo().childMethod();
Run Code Online (Sandbox Code Playgroud)

没有像这样定义类型:

Child child = new Child();
child.foo().<Child>childMethod(); // compiles fine
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Boh*_*ian 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
Run Code Online (Sandbox Code Playgroud)

  • @Bohemian 为什么你使用 &lt;T extends Parent&lt;T&gt;&gt; 而不是 &lt;T extends Parent&gt; ? (2认同)