【发布时间】:2016-01-26 18:38:47
【问题描述】:
假设我有这门课
class Generic<T extends List<? extends Integer>, E extends List<? extends Integer>>
或菱形括号内的任何长泛型类型。在使用此类时,为了保持类型安全,我需要不断提及泛型类型。因此,例如,如果我想遍历上述类的Set 或对其进行操作,我需要执行以下操作:
class SomeClass {
<T extends List<? extends Integer>, E extends List<? extends Integer>> void add(Set<Generic<T, E>> mySet, Generic<T, E> toAdd) {
mySet.add(toAdd);
}
<T extends List<? extends Integer>, E extends List<? extends Integer>> void iterate(Set<Generic<T, E>> mySet) {
for (Generic<T, E> myGeneric : mySet)
{
// do something with myGeneric
}
}
}
但是,这很快就会变得非常麻烦。我搜索并找不到某种正确处理此问题的方法。我知道可以写Generic<?, ?>,但据我所知,这会阻碍类型安全检查。
有没有办法妥善处理这个问题?以某种方式命名T extends List<? extends Integer>, E extends List<? extends Integer 并将该名称用作语法快捷方式?
快速说明:我不是在谈论 Java 7 中引入的 initialization 语法糖,其中右侧可以使用来自 声明。
【问题讨论】:
标签: java generics syntactic-sugar