使用 Java 反射和泛型:方法可以将实际类型指定为其 return 值吗?

Using Java reflection and generics: can a method specify an actual type as its return value?

我有一个 class 维护 Baz 类型对象的列表。但是,我想在此列表中放置一些对象,这些对象是从 Baz 类型的子 classes 实例化的(用于覆盖行为)。

到目前为止,这已经很简单了 -- 列表中的多态性。但是维护列表的class本身是抽象的,不同的实现会要求在列表中放置不同的类型。一些抽象函数 getTypeToUse 应该指定要插入到列表中的元素的类型。这在 Java 中可行吗?

考虑以下伪代码:

public abstract class Foo {
    public void Bar() {
        List<Baz> qux = new ArrayList<>();
        Type buzz = getTypeToUse();
        Baz fizz = new buzz();
        qux.add(fizz);
    }

    // The returned Type should be some subclass of Baz
    // It would be nice to enforce this, like <? extends Baz>
    public abstract Type getTypeToUse(); 
}

谢谢!

您可以 return class 对象。 class Class<T> 实现接口 Type。像这样定义你的方法:

public abstract Class<? extends Baz> getClassToUse();

然后像这样实现它(在class Baz):

@Override
public Class<? extends Baz> getClassToUse() {
   return Baz.class;
}