NaN*_*NaN 7 java generics types
我有一个类型为T的元素的容器(List),想要过滤它.所以它只包含特定子类型U的元素.是否可以设置"动态"返回类型?
例:
class SomeContainer<T> extends ArrayList<T>{
public SomeContainer<T> subset(Class c){
SomeContainer<...here the type of c > output = new SomeContainer<.. also ..>();
//filter own elements and only add c-objects in the new list
return output;
}
}
Run Code Online (Sandbox Code Playgroud)
目前它返回泛型类型T的列表而不是c-Class类型的列表(T的子类型).因此,我有时会收到以下编译器通知:
Note: SomeContainer.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Run Code Online (Sandbox Code Playgroud)
因为我想在子类型的对象之后过滤列表并触发特定于子类型的方法,所以我需要一个特定的子类型列表.
java.lang.Class 是一个参数化的泛型类型,因此您可以使用其类型参数,如下所示:
public <U extends T> SomeContainer<U> subset(Class<U> c){
SomeContainer<U> output = new SomeContainer<U>();
for (T val : this) {
if (c.isInstance(val)) {
output.add(c.cast(val));
}
}
return output;
}
Run Code Online (Sandbox Code Playgroud)