在方法中键入参数

时间:2013-06-22 07:52:54

标签: java generics

我想写一个泛型方法,它接受一个包含Integer或String值的Set。该方法应该对给定的Set进行分区,并返回一个包含泛型类型集的列表。我对泛型很新,并且对下面指定的代码有疑问。编译器不喜欢方法签名中的T.问题是什么?

private List<Set<T>> createChunkSet(Set<T> set) {
    Set<T> set = new HashSet<T>();
    return set;
}

3 个答案:

答案 0 :(得分:1)

更改方法声明:

private <T> List<Set<T>> createChunkSet(Set<T> set) {
   // your code here
}

获取包含整数或字符串值的Set

Set<T>只能包含一种类型的元素,T的类型,因此IntegerString,而不是两者。

答案 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);