Java 将对象强制转换为ArrayList<;字符串>;

Java 将对象强制转换为ArrayList<;字符串>;,java,casting,arraylist,Java,Casting,Arraylist,是否可以将对象强制转换为例如数组列表 下面的代码给出了一个问题的示例。问题在最后一排 setDocs((ArrayList<Document>)obj); 不,这是不可能的,因为泛型是如何在Java中实现的 类型信息在运行时不可用,因此无法通过instanceof进行检查 您可以做的是转换到列表,然后检查每个元素是否是文档。在Java中,泛型没有具体化,即转换时不使用它们的泛型类型 所以这个代码 setDocs((ArrayList<Document>)obj); 由

是否可以将
对象
强制转换为例如
数组列表

下面的代码给出了一个问题的示例。问题在最后一排

setDocs((ArrayList<Document>)obj);

不,这是不可能的,因为泛型是如何在Java中实现的

类型信息在运行时不可用,因此无法通过
instanceof
进行检查


您可以做的是转换到
列表
,然后检查每个元素是否是
文档

在Java中,泛型没有具体化,即转换时不使用它们的泛型类型

所以这个代码

setDocs((ArrayList<Document>)obj);

由于运行时强制转换不会检查您的
ArrayList
包含
Document
对象,编译器会发出警告。

问题出在哪里?你得到的错误是什么?你说,想要将一个对象
obj
强制转换为
ArrayList
,但在最后一行中,你似乎强制转换为
ArrayList
我写的,例如ArrayList,但是你是对的,类型应该是document注意,会有很多“else-if”而不是else{if(){else}}就像你用python或者其他关心缩进和行的东西写这篇文章一样。我不认为实际结果会有什么不同,但是我知道,如果它的类型是ArrayList,那么它将是ArrayList。编译器在下一行向我发出警告,我将其转换为ArrayList。您所能做的最好的事情就是抑制该警告。再想想,如果你真的需要这个怪物的瞬间。在大多数程序中,类型应该在编译时就知道,而不需要进行这种动态检查。是的,我知道,但代码非常旧,使用Java 1.4编译,因此我尝试将其更新为Java 1.7,并希望清除一些类似这样的基本警告。不管怎样,谢谢你。。。那么,有没有关于如何重新编写该方法的建议?我是否也应该让这个方法泛型化,那么它会起作用呢?只要你必须强制转换,你就会有问题。您可以忽略编译器警告,也可以在类型正确时直接调用setDocs(ArrayList)。
setDocs((ArrayList<Document>)obj);
setDocs((ArrayList)obj);