我有一些代码只接受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);