我在Utils类中创建了以下函数:
public class Utils{
public static String getUserIdCSVs(List<Serializable> voList) {
StringBuilder csv = new StringBuilder();
if(voList != null){
for(Serializable serializable :voList){
UserVO userVO = null;
if(serializable != null && serializable instanceof AdminVO){
userVO = ((AdminVO)serializable).getUserVO();
}
if(serializable != null && serializable instanceof UserVO){
userVO = (UserVO)serializable;
}
csv.append(userVO.getUserId()+",");
}
}
return csv.toString();
}
}我不能打电话
使用:
List<AdminVO> adminVoList = new ArrayList<AdminVO>
Utils.getUserIdCSVs(adminVoList);或使用:
List<UserVO> userVoList = new ArrayList<UserVO>
Utils.getUserIdCSVs(userVoList);该函数编译正确。
发布于 2014-02-13 14:13:01
这是意料之中的:在Java中,基于同一层次结构的类不存在泛型类型的协方差。
如果你想一想,这是有道理的。考虑到这一点:
List<AdminVO> adminVoList = new ArrayList<AdminVO>();
Utils.addUser(adminVoList); // assume it expects ArrayList<Serializable>现在,Utils.addUser可以向管理员列表中添加一个UserVO (或其他任何Serializable),这违反了原始列表的类型:
static addUser(List<Serializable> users) {
users.add(new UserV0("I am not an admin!"));
}但是,由于users in addUser与其外部的adminVoList是相同的,所以最终在列表中出现了非admins,该列表应该由admins组成。
要处理这个限制,只需将adminVoList声明为
List<Serializable> adminVoList = new ArrayList<Serializable>();发布于 2014-02-13 14:13:42
List<AdminVO>不是List<Serializable>的子类。
想象一下:
List<AdminVO> list = new LinkedList<>();
List<Serializable> myList = list;
myList.add(new SomeConcreteSerializable());
//list contains an element which is not of type AdminVO!https://stackoverflow.com/questions/21756544
复制相似问题