我有一个带有嵌套通配符有界类型的有界类型参数的类。在类中,我需要在多个方法中使用绑定嵌套参数的类型。有没有办法将通配符有界类型定义为泛型类型参数,或者将其分配给泛型变量名,以便可以在多个地方轻松引用它?
现在实现类的方式就像
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。
我能找到的唯一可能的选项/解决方案是在这个问题 的解决方案中给出一个带有工厂方法的浅子类 Java 和 Java 泛型中的嵌套类型参数- 多次使用相同的通配符