Java 泛型集合和方法返回类型

Java 泛型集合和方法返回类型,java,generics,Java,Generics,我有一个方法接口 public List< Object > getLeftBusinessObjects( List< Object > businessObjectIds, Object owningSystemId ); public ListgetLeftBusinessObjects(Listbusinessobjectid,objectowningsystemid); 我的实施是: public List<Object> getLeftBusi

我有一个方法接口

public List< Object > getLeftBusinessObjects( List< Object > businessObjectIds, Object owningSystemId );
public ListgetLeftBusinessObjects(Listbusinessobjectid,objectowningsystemid);

我的实施是:

public List<Object> getLeftBusinessObjects(List< Object > businessObjectIds, Object owningSystemId)
{    
    List<MyObject> myObjs= Helper.getMyObjects(businessObjectIds);
    return myObjs;
}
public List getLeftBusinessObjects(ListBusinessObjectId,Object owningSystemId)
{    
列出myObjs=Helper.getMyObjects(BusinessObjectId);
返回myobj;
}

这样做会得到错误:

Type mismatch: cannot convert from List<MyObject> to List<Object>
类型不匹配:无法从列表转换为列表
我得往这边投

return (List<Object>) (Object) myObjs;
返回(列表)(对象)myObjs;
以避免错误

有人能解释一下为什么吗?如果所有对象都将per dafault对象作为超类,为什么我必须强制转换?

一个
列表
不是一个
列表。
,否则你就可以将
对象
放入
列表

试试这个

public List<? extends Object> getLeftBusinessObjects(List< Object > businessObjectIds, Object owningSystemId)
{    
    List<MyObject> myObjs= Helper.getMyObjects(businessObjectIds);
    return myObjs;
}

public List您可以修改
getLeftBusinessObjects()
返回的列表,方法是向列表中添加任何类型的
object
。这破坏了类型安全性,因为
Helper.getMyObjects(BusinessObjectId)
返回的列表保证只保存
MyObject
类型的对象,java中的泛型中没有协方差


因此:
List
不扩展
List

泛型用于对象的编译时验证,我们将其添加到集合中。因此,您希望将
MyObject
作为列表
list MyObject
中的对象,这意味着您只想添加这些对象。但是您将
List
分配给
List myObjs
,这意味着List可以有任何类对象,因此它打破了泛型的约定。因此,编译器让开发人员决定将
List
分配给
List myobj
是否安全,因为在运行时存在
ClassCastException