编辑:这是一个Eclipse问题(?)。 Eclipse显示错误但编译它,似乎与Java 8和Type Casting有关。
我的班级有List<E>
字段。如果我在课堂内访问它,我会得到List<E>
但是如果我从外部访问List,我只会得到List
而没有泛型类型。如果我访问它的元素,我只会获得Object
,而不是E
但是在我的代码中我需要显式E
,那么如何更改/修复它,以便在不删除泛型且没有显式转换的情况下返回List?
带列表的类:
public class ListClass {
private List<String> list;
public ListClass(){
list = new ArrayList<>();
}
public List<String> getList(){
return list;
}
}
包含类:
public class ContainingClass {
private ListClass lc;
public ContainingClass(){
lc = new ListClass();
}
public ListClass getListClass(){
return lc;
}
}
现在出现问题:
ContainingClass cc = new ContainingClass();
String str = cc.getListClass().getList().get(0);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error: "Type mismatch: cannot convert from Object to String"
但为什么?
答案 0 :(得分:0)
这个答案是指Revision 3
我认为问题是该类应该具有模板参数,而不是方法。
public class X<K, V> {
private HashMap<K, V> hashMap;
public X(){
hashMap = new HashMap<>();
}
public HashMap<K,V> getHashMap(){
return hashMap;
}
}
答案 1 :(得分:0)
这就是导致问题的原因:
public class X {
private HashMap<K, V> hashMap;
public X(){
hashMap = new HashMap<>();
}
public HashMap<K,V> getHashMap(){
return hashMap;
}
}
实例化X时,不保留任何参数,因此它是原始类型。
您的解决方法是告诉X在实例化时使用哪些类型的键和值:
public class X<K, V> {
private HashMap<K, V> hashMap;
public X(){
hashMap = new HashMap<>();
}
public HashMap<K,V> getHashMap(){
return hashMap;
}