使用Java反射和泛型:方法可以指定实际类型作为其返回值



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

到目前为止,这已经足够简单了——List中的多态性。然而,维护列表的类本身是抽象的,不同的实现将需要在列表中放置不同的类型。一些抽象函数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(); 
}

谢谢!

您可以返回一个类对象。类Class<T>实现接口Type。像这样定义你的方法:

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

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

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

相关内容

  • 没有找到相关文章

最新更新