为什么Java抱怨传递Collection <enum>,你期望Collection <object>

时间:2015-09-21 19:15:08

标签: java enums

我有一些代码只接受Collection并检查null,如果它不只是为你转换为toString。

static Collection<String> test1(Collection<Object> objects) {
        if(objects != null) {
            return objects.stream().map(x -> x.toString()).collect(Collectors.toList())
        }else {
            return null;
        }
    }

如果我这样做,它可以正常工作

Collection<Object> myCollectionOfObjects = new ArrayList<>();
test1(myCollectionOfObjects);

但如果我传入一个Enums集合

,则java会抱怨
Collection<SomeEnumIHave> myCollectionOfEnums = new ArrayList<>();
test1(myCollectionOfEnums);

我得到的例外是

Error:(283, 87) java: incompatible types: java.util.Collection<SomeEnumIHave> cannot be converted to java.util.Collection<java.lang.Object>

但是通过在线阅读,似乎Enums是实际的引用类型,所以它应该是一个Object。

我有多种方法可以解决这个问题,但我很困惑为什么会这样。

修改 我应该指出,任何其他对象类型都可以正常工作。所以它不是泛型的问题(方法本身并不是通用的),它似乎就像拳击问题,但Enums不需要被装箱。

Collection<MyCustomObject> myCollectionOfObjects = new ArrayList<>();
test1(myCollectionOfObjects);

0 个答案:

没有答案