0

我想编写一个通用方法,它采用一个包含整数或字符串值的集合。该方法应该对给定的 Set 进行分区并返回一个包含泛型集合的列表。我对泛型很陌生,并且对下面指定的代码有疑问。编译器不喜欢方法签名中的 T 。问题是什么?

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

3 回答 3

1

更改方法声明:

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

它得到一个包含整数或字符串值的 Set

ASet<T>只能具有一种类型的元素,即 的类型T,因此,要么IntegerString,而不是两者。

于 2013-06-22T07:54:42.763 回答
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;
}
于 2013-06-22T07:59:05.300 回答
0

我想编写一个通用方法,它获取一个包含整数或字符串值的集合。该方法应该对给定的 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);
于 2013-06-22T08:47:28.497 回答