Java 未经检查的强制类型转换警告-如何避免这种情况?
我在readObject()的行中收到一条“类型安全:未选中从对象到ArrayList的强制转换”警告,在下面的代码段中:Java 未经检查的强制类型转换警告-如何避免这种情况?,java,android,eclipse,Java,Android,Eclipse,我在readObject()的行中收到一条“类型安全:未选中从对象到ArrayList的强制转换”警告,在下面的代码段中: // Read the Event List theEventArrayList = new ArrayList<Event>(); String FILENAME = "EventData.dat"; FileInputStream fis; try { fis = openFileInput(FILENAME); ObjectIn
// Read the Event List
theEventArrayList = new ArrayList<Event>();
String FILENAME = "EventData.dat";
FileInputStream fis;
try {
fis = openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(fis);
theEventArrayList = (ArrayList<Event>) ois.readObject();
fis.close();
}
//读取事件列表
theEventArrayList=newarraylist();
字符串FILENAME=“EventData.dat”;
文件输入流fis;
试一试{
fis=openFileInput(文件名);
ObjectInputStream ois=新ObjectInputStream(fis);
theEventArrayList=(ArrayList)ois.readObject();
fis.close();
}
Event
是一个简单的类,由一些字符串、日历、布尔值和整数组成。ArrayList
是在镜像操作中使用ObjectOutputStream写入的。这段代码所使用的应用程序在一个多月内每天执行多次,没有出现任何故障,但是编译器警告让我感到困扰,如果可以正确地“检查”它,我不想仅仅抑制它。编译器是正确的-谁说您正在读取的对象实际上是ArrayList?我可以很容易地用完全不同的东西替换文件,你会得到一个例外
Object obj = ois.readObject();
if (obj instanceof ArrayList)
// do something
else
// Error
应该有用。是的,由于泛型,您仍然会收到一个警告,但这是Java的泛型系统,摆脱它意味着创建一个新对象并一次添加一个事件-但是我们必须将对象强制转换为事件和。。唉,不是更好,只是接受一般警告。抑制它。您唯一的另一种选择是强制转换到ArrayList,但是在代码的其他地方,您必须处理非类型化的ArrayList和读取强制转换。在这种情况下,压制是没有害处的。很老了,但我还是老朋友的“谷歌来了”回应
如果您想避免它,并且不受CPU或RAM的限制,您可以尝试收集。复制为什么不取消它?显然,您确信这是完全合法的,所以只需关闭编译器:)黑客/变通方法只会降低代码的可维护性。