所以我有一个获取ArrayList(Parameter)的方法,它应该返回相同类型的ArrayList:
static ArrayList<?> readFromFileToArrayList (Activity activity, String name, ArrayList<?> data) {
try {
String savedData = FileReadWrite.readFromFile(activity, name);
JSONArray jsonArray = new JSONArray(savedData);
if(data.get(0) instanceof String){
ArrayList<String> specificData= (ArrayList<String>) data;
for(int i = 0; i<jsonArray.length();i++){
if(!data.contains(jsonArray.optString(i))){
specificData.add(jsonArray.optString(i));
}
}
return specificData;
}
对于这个实现,我得到一个&#34;未经检查的投射警告&#34;。当然我可以使用&#34; SuppressWarnings&#34;但我正在寻找一个更好的解决方案,或者这个解决方案是&#34; SuppressedWarnings&#34;已经被认为是一个干净的解决方案?
感谢您的一切,是的,我已经搜索了Stackoverflow的答案。但我真的不知道这是否仍然是hacky或干净...
答案 0 :(得分:3)
一般来说,仅仅因为data.get(0)
是String
并不意味着所有其他元素都是,所以编译器无法知道它的安全
(实际上,即使经过instanceof
检查,它仍然是一个不安全的演员。)
在这种情况下,由于您对JSON库的了解,将@SuppressWarnings
添加到specificData
的声明是合理的。
答案 1 :(得分:2)
你不需要重复使用data
,事实上它的设计很差,有这样的副作用。该方法返回一个列表;它不应该改变其中一个参数。
只需创建新列表并使用data
填充
ArrayList<String> specificData = new ArrayList<>();
for (Object obj : data)
specificData.add(obj.toString());
您可以保持其余代码相同。您现在不会有任何警告(或副作用!)。