【发布时间】:2013-07-03 20:04:04
【问题描述】:
我有一个带有嵌套通配符有界类型的有界类型参数的类。在类中,我需要在多个方法中使用绑定嵌套参数的类型。有没有办法将通配符有界类型定义为泛型类型参数,或者将其分配给泛型变量名称,以便在多个地方轻松引用它?
现在类的实现方式是这样的
class AbstractManager<F extends Filter<? extends Criteria<? extends Type>>>
{
protected void setFilter(F filter)
{
setCriteria(f.getCriteria());
}
protected <T extends Criteria<? extends Type>> void setCriteria(List<T> criteria)
{
}
protected <T extends Criteria<? extends Type>> void doSomethingWithCriteria(List<T> criteria)
{
...
}
}
实际上并没有将列表的类型限制为过滤器的类型,但在我们的情况下已经足够了。理想情况下,列表的类型将被限制为过滤器的类型,使用的构造可以将过滤器的推断类型绑定到一个名称,这很像方法上的有界类型参数,但在类级别。
基本上我想做类似的事情
class <G extends Criteria<? extends Type> AbstractManager<F extends Filter<G>>
据我所知和可以找到的,这是不可能的,但我希望 java 7 中可能有一个晦涩的功能或新功能可以使这成为可能。 我知道可以指定第二个类型参数,例如
class AbstractManager<F extends Filter<G>, G extends Criteria<? extends Type>>
但我不希望子类在编译器可以确定时必须指定 G。
我能找到的唯一可能的选项/解决方案是在这个问题的solution 中提供一个带有工厂方法的浅子类 Nested Type Parameters in Java 并且在 Java generics - use same wildcard multiple times
【问题讨论】:
-
你能提供一个你想要的最终结果的样本吗?
标签: java generics type-parameter nested-generics