Java 执行ObjectList=StringList时的ClassCastException
我使用带有一个字符串的方法Java 执行ObjectList=StringList时的ClassCastException,java,string,object,arraylist,Java,String,Object,Arraylist,我使用带有一个字符串的方法Arrays.asList()创建了列表。 然后我将其分配到列表,得到ClassCastException。 我做错了什么 代码是: class A { Object value; public <T> T getAValue() { return (T) value; } } A类{ 目标价值; 公共T getAValue(){ 返回(T)值; } } 然后我做了 A a = new A(); a.value
Arrays.asList()
创建了列表。
然后我将其分配到列表
,得到ClassCastException。
我做错了什么
代码是:
class A {
Object value;
public <T> T getAValue() {
return (T) value;
}
}
A类{
目标价值;
公共T getAValue(){
返回(T)值;
}
}
然后我做了
A a = new A();
a.value = "abc";
List<Object> list = Arrays.asList(a.getAValue());
A A=新A();
a、 value=“abc”;
List=Arrays.asList(a.getAValue());
试试这个:
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());
}
}
导入java.util.array;
导入java.util.List;
甲级{
T值;
公共T getAValue(){
返回值;
}
公共静态void main(字符串…参数){
A=新的A();
a、 value=“abc”;
List=Arrays.asList(a.getAValue());
系统输出打印项次(列表);
System.out.println(a.value.getClass());
}
}
请注意,在声明class A
T的类型绑定到字符串时,通过声明泛型类型“T”可以简化语法,不需要在getAValue()中强制转换返回值,泛型会为您解决这个问题。尝试以下操作:
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());
}
}
导入java.util.array;
导入java.util.List;
甲级{
T值;
公共T getAValue(){
返回值;
}
公共静态void main(字符串…参数){
A=新的A();
a、 value=“abc”;
List=Arrays.asList(a.getAValue());
系统输出打印项次(列表);
System.out.println(a.value.getClass());
}
}
请注意,在声明
类A时,通过声明泛型类型“T”可以简化语法,T的类型绑定到字符串,无需在getAValue()中强制转换返回值,泛型会为您解决此问题。如果您确实无法在类A
上添加类型信息(即使用类A
),然后,一个简单的cast解决您的问题,如()所示:
还请注意,您应该为value
使用setter(即noa.value=“…”
)
一些阅读:如果你真的不能在A
上添加类型信息(即使用A类
),那么简单的强制转换就可以解决你的问题,如下所示():
还请注意,您应该为value
使用setter(即noa.value=“…”
)
一些阅读:你能展示一下你的代码吗?答案是,“一个列表
并不是一个列表
”,但是一个更完整的解决方案还包括一种方法来帮助你绕过你所面临的问题。要扩展Makato所说的,不是所有的对象都是字符串,所以你可以得到一个ClassCastException@cricket_007:我认为他们试图做的是(列表)someListTypeStringInstance
,而不是相反。根本不清楚如何获得类异常。当将列表
强制转换为列表
时,您将永远不会得到ClassCastException
,因为在运行时没有区别。我们需要看看你的代码!我认为您需要添加A
和T值
而不是对象值
,然后public T getAValue()
和返回值
,然后实例化A=new A()
您能显示您的代码吗?答案是,“一个列表
并不是一个列表
”,但是一个更完整的解决方案还包括一种方法来帮助你绕过你所面临的问题。要扩展Makato所说的,不是所有的对象都是字符串,所以你可以得到一个ClassCastException@cricket_007:我认为他们试图做的是(列表)someListTypeStringInstance
,而不是相反。根本不清楚如何获得类异常。当将列表
强制转换为列表
时,您将永远不会得到ClassCastException
,因为在运行时没有区别。我们需要看看你的代码!我认为您需要添加A
和T值
而不是对象值
,然后添加public T getAValue()
和返回值
,然后实例化A=new A()
为什么在main中使用原始类型?还要注意的是,评论a中的OP不能修改。为什么在main中使用raw类型?还请注意,评论a中的OP不能修改。
A<String> a = new A<String>();
a.value = "abc";
List<String> list = Arrays.asList(a.getAValue());