【发布时间】:2021-02-19 05:38:26
【问题描述】:
public static <T> List<T> toArray(JSONArray array) {
if(array == null) {
return Collections.emptyList();
}
List<T> o = new ArrayList<>();
for(int i=0, l = array.length(); i < l; i++) {
o.add((T) array.get(i));
}
return o;
}
public static void test() {
List<Object> values = new ArrayList<>();
values.add("Product");
JSONObject jsonObject = new JSONObject();
jsonObject.put("key", values);
List<Long> test = new ArrayList<>();
test = toArray((JSONArray) jsonObject.get("key"));
System.out.println(test);
}
上面的代码允许将String 值存储在List<Long> 中,这完全是荒谬的。任何帮助非常感谢?
【问题讨论】:
-
你明白为什么它会警告你未经检查的演员表吗?
-
如果您的代码(和所有库)在没有任何类型安全警告的情况下编译,泛型将提供类型安全。您的
(T)演员表未选中,这意味着:编译器会假装您知道自己在做什么,但实际上并未验证对象是否为T类型。 -
@kannanrbk:那你没仔细看。您的代码不会在没有警告的情况下编译。
-
除非您禁用了警告,否则您将从此代码中收到警告。
-
不幸的是,一些 IDE 附带了错误的编译器警告默认值。