我使用方法Arrays.asList()
创建了一个字符串列表。
然后我将它分配给List<Object>
,我得到了ClassCastException。
我做错了什么?
代码是:
class A {
Object value;
public <T> T getAValue() {
return (T) value;
}
}
然后我做
A a = new A();
a.value = "abc";
List<Object> list = Arrays.asList(a.getAValue());
答案 0 :(得分:1)
试试这个:
import java.util.Arrays;
import java.util.List;
class A<T>{
T value;
public T getAValue(){
return value;
}
public static void main(String... args){
A a = new A();
a.value = "abc";
List<Object> list = Arrays.asList(a.getAValue());
System.out.println(list);
System.out.println(a.value.getClass());
}
}
通过声明泛型类型&#39; T&#39;来注意简化语法。当声明class A<T>
T&#39的类型绑定到String并且没有必要在getAValue()中转换返回值时,泛型会为您处理。
答案 1 :(得分:1)
如果您真的无法在A
上添加类型信息(即使用class A<T>
),那么简单的广告就会解决您的问题,例如demo) :
A a = new A();
a.value = "abc";
List<Object> list = Arrays.asList((Object) a.getAValue());
这是安全的,因为所有内容都是Object
,但干净的方法是使用A
上的类型信息,,如另一个答案所述({{3} }):
A<String> a = new A<String>();
a.value = "abc";
List<String> list = Arrays.asList(a.getAValue());
另请注意,您应使用value
的设定者(即无a.value = "..."
)。
一些阅读:demo