首页 > 解决方案 > 具有泛型返回类型的静态方法

问题描述

我正在尝试定义一个可以返回特定类的子类的静态方法。我正在使用泛型,因为它不起作用。

示例代码:

public class Test {

    class A {
    }

    class B extends A {
    }

    public static <T extends A> T getA() {
        return new B();
    }

    public static void main(String[] args) {
        B b = getA();
    }
}

如您所见,我所说getA()的将返回 T ,它是“A”类的孩子。我在那里返回 B 实例,它是 A 的孩子,但仍然没有编译。知道我做错了什么吗?提前致谢!

编辑:并且会有多种子类型可以返回getA()

public class Test {

    class A {
    }

    class B extends A {
    }

    class C extends A {
    }

    public static <T extends A> T getA(int type) {
        if(type = 0) {
             return new B();
        } else {
             return new C();
        }
    }

    public static void main(String[] args) {
        B b = getA(0);
        C c = getA(1);
    }
}

标签: javagenerics

解决方案


如您所见,我所说getA()的将返回 T ,它是“A”类的孩子。

是的,但是您允许调用者说出他们想要返回子类。A

如果你写了,但不是的子类型在X x = getA();哪里?XAB

唯一可以安全地从该方法返回的是null.

如果您想说该方法将返回的任何子类型A,请设置返回类型A


推荐阅读