我想写一个泛型方法,它接受一个包含Integer或String值的Set。该方法应该对给定的Set进行分区,并返回一个包含泛型类型集的列表。我对泛型很新,并且对下面指定的代码有疑问。编译器不喜欢方法签名中的T.问题是什么?
private List<Set<T>> createChunkSet(Set<T> set) {
Set<T> set = new HashSet<T>();
return set;
}
答案 0 :(得分:1)
更改方法声明:
private <T> List<Set<T>> createChunkSet(Set<T> set) {
// your code here
}
获取包含整数或字符串值的Set
Set<T>
只能包含一种类型的元素,T
的类型,因此Integer
或String
,而不是两者。
答案 1 :(得分:0)
您必须返回一个列表,现在您要返回一个列表。
将其更改为:
private List<Set<T>> createChunkSet(Set<T> set) {
set = new HashSet<T>();
List<Set<T>> list = new ArrayList<Set<T>>();
list.add(set);
return list;
}
答案 2 :(得分:0)
我想写一个泛型方法,它获取一个包含Integer或String的Set 值。方法应该对给定的Set进行分区并返回包含多组的列表 通用类型。
好的,这个方法的参数应该是java.util.Set。 Object是String和Integer的通用超类。
但是返回类型?
您要求返回的列表应包含2个Set,Set和Set。这不能使用泛型(而不是任何其他语言)用Java来安全地编写 - 类型安全列表是所有相同类型的对象列表!
您想要实现的目标可以如下:
public <T> Set<T> createChunkSet(Set<Object> set, Class<T> filterClass) {
Set<T> chunkedSet = new HashSet<T>();
for (Object o : set) {
if (filterClass.isAssignableFrom(o.getClass())) {
chunkedSet.add(filterClass.cast(o));
}
}
return chunkedSet;
}
必须像这样调用此方法:
Set<Integer> ints = createChunkSet(myUntypesSet, Integer.class);