Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未经检查的强制类型转换警告-如何避免这种情况?_Java_Android_Eclipse - Fatal编程技术网

Java 未经检查的强制类型转换警告-如何避免这种情况?

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

我在readObject()的行中收到一条“类型安全:未选中从对象到ArrayList的强制转换”警告,在下面的代码段中:

// 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的限制,您可以尝试收集。复制

为什么不取消它?显然,您确信这是完全合法的,所以只需关闭编译器:)黑客/变通方法只会降低代码的可维护性。