Java中的泛型类型的泛型类型是什么?

5
我有一个接口。
public interface BWidgetObject<T> {
}

我希望使用这个接口来基于这个类型创建一个新的通用接口:

public interface BDataList<BWidgetObject> {}

前者会发出警告,指出类型T被隐藏。以下内容会导致编译器错误:

public interface BDataList<BWidgetObject<T>> {}

我该如何将 BWidgetObject<T> 表达为 BDataList 的类型参数?

答案取决于 BDataList 的类型参数应该代表什么... - dhke
2个回答

6
你可以尝试以下方法:
public interface BDataList<T extends BWidgetObject<?>> {}

在这里,我们指定类型T将是一个我们实际上不关心其类型的BWidgetObject(这就是为什么使用通配符的原因)。我们只关心T以及它将成为BWidgetObject子类的事实。


1
如果V是另一个类型参数,则必须执行BDataList<T extends BWidgetObject<V>, V> - Konstantin Yovkov
然后我得到了“绑定不匹配:类型V不是类型BWidgetObject<T>的有界参数<T extends BaseEntity>的有效替代品”。 - Michael
你能否在你的回答中发布正确的表格? - Michael
我不太确定你想要做什么。V是什么?它是一种类型还是类型参数?它有界限吗? - Konstantin Yovkov
公共接口 BWidgetObject<V> { } - Michael
显示剩余4条评论

1
使用通用的bound:
public interface BDataList<T extends BWidgetObject<?>> {}

或者,如果您需要显式地键入widget,则需要创建另一个子接口:

public interface BWidgetDataList<T> extends BDataList<BWidgetObject<T>> {}

我们不应该在没有参数化的情况下使用通用类型,因此更好的公共接口是BDataList<T extends BWidgetObject<?>> {}。 - Piotr Müller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接