为什么Java不能转换ArrayList< TreeSet< Integer>>到列表< Set< Object>&gt ;? [英] Why can't Java convert an ArrayList<TreeSet<Integer>> into a List<Set<Object>>?

查看:347
本文介绍了为什么Java不能转换ArrayList< TreeSet< Integer>>到列表< Set< Object>&gt ;?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做一些看起来很简单的事情:总结一组列表的大小。 Netbeans给出了以下警告/错误:

pre $ 实际参数java.util.ArrayList< java.util.TreeSet< java.lang。整数>>不能转换成java.util.List< java.util.Set< java.lang.Object>>通过方法调用转换

获得以下两段代码:

  / ** 
*汇总列表中所有组的大小。请注意,尽管在单个集合中将有
*没有重复元素,但姐妹集合可能包含
*元素,所以返回的值不是**等于唯一$ b的数目所有集合中的$ b *元素。
* @param list,集合列表
* @return所有集合中包含的元素数量
* /
public static int sizeOfListOfSets(List< Set< Object>> ; list){
int size = 0;

for(Set< Object> set:list){
size + = set.size();
}

返回大小;
}

然后用以下方式调用它:

  ArrayList< TreeSet< Integer>> testList = new ArrayList< TreeSet< Integer>>(); 
TreeSet<整数>测试集;
int size = 0;

testSet = new TreeSet< Integer>();
testSet.add(new Integer(++ size));
testSet.add(new Integer(++ size));
testList.add(testSet);
testSet = new TreeSet< Integer>();
testSet.add(new Integer(++ size));
testList.add(testSet);

int expResult = size;
int result = Helpers.sizeOfListOfSets(testList);

最后一行给出编译错误:

 错误:方法sizeOfListOfSets类Helpers不能应用于给定的类型; 
1错误

所以,为什么java.lang.Integer不能转换为java .lang.Object?

解决方案

A 列表< Integer> a List< Object> 。如果 Java 允许,那么你可以用 List< String> 调用该方法,这样你就会被破坏。正如 Jeremy Heiler 指出的,您可以使用 List<扩展对象> ,你会没事的。这意味着允许扩展 Object 的每种类型。 在通用术语中称为通配符


I'm attempting to do something that seems rather simple: sum the sizes of a list of sets. Netbeans gives the following warning/error:

actual argument java.util.ArrayList<java.util.TreeSet<java.lang.Integer>> cannot be    converted to java.util.List<java.util.Set<java.lang.Object>> by method invocation conversion

for the following two pieces of code:

/**
 * Sums the sizes of all sets in a list.  Note that while there will be
 * no duplicate elements in a single set, "sister" sets may contain
 * elements, so the value returned is **not** equal to the number of unique
 * elements in all sets.
 * @param list, a List of Sets
 * @return the number of elements contained in all sets
 */
public static int sizeOfListOfSets(List<Set<Object>> list) {
    int size = 0;

    for (Set<Object> set : list) {
        size += set.size();
    }

    return size;
}

and then calling it with the following:

    ArrayList<TreeSet<Integer>> testList = new ArrayList<TreeSet<Integer>>();
    TreeSet<Integer>            testSet;
    int                         size = 0;

    testSet = new TreeSet<Integer>();
    testSet.add(new Integer(++size));
    testSet.add(new Integer(++size));
    testList.add(testSet);
    testSet = new TreeSet<Integer>();
    testSet.add(new Integer(++size));
    testList.add(testSet);

    int expResult = size;
    int result    = Helpers.sizeOfListOfSets(testList);

the last line gives the compilation error:

error: method sizeOfListOfSets in class Helpers cannot be applied to given types;
1 error

So, why can't java.lang.Integer be converted to java.lang.Object?

解决方案

A List<Integer> is not a List<Object>. If Java allowed that, then you could call the method with List<String> and you will be broken. As Jeremy Heiler pointed out you can use List<? extends Object> and you will be fine. This means every type which extends Object is allowed. ? is called a wildcard in generic jargon.

这篇关于为什么Java不能转换ArrayList&lt; TreeSet&lt; Integer&gt;&gt;到列表&lt; Set&lt; Object&gt;&gt ;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆