如何使用Collections.checkedlist
How to use Collections.checkedlist
List<SomeClass<String>> list = new ArrayList<SomeClass<String>>();
List l = Collections.checkedList(list, SomeClass.class);
那是我的 code.Eclipse 告诉我有一些错误:
The method checkedList(List<E>, Class<E>)
in the type Collections is not applicable for the arguments (List<SomeClass<String>>, Class<SomeClass>)
如何使用checkedList?如何更改代码?
Java 无法在运行时检查类型的泛型参数 (How to get a class instance of generics type T),因此 checkedList
将无法强制执行类型的 <String>
部分签名.
您可以添加转换以允许此方法调用,因此 checkedList
将强制仅将 SomeClass<?>
的实例添加到 List
,但您不会拥有完整的类型运行时安全。
您可以将 Class<SomeClass>
转换为原始 Class
以使其编译。
List<SomeClass<String>> list = new ArrayList<>();
List l = Collections.checkedList(list, (Class)SomeClass.class);
请注意,由于 type erasure。
,您无法在运行时检查类型参数
问题是您不能在 Java 中拥有 class 通用类型的文字:Java: how do I get a class literal from a generic type? 并且 List
包含 <Foo<Bar>>
您的 class 文字必须是 Foo<Bar>.class
.
无论如何,由于 checkedList
将在运行时添加类型安全检查,您可以尝试使用 dirty 解决方案之一,例如原始类型:
List<SomeClass<String>> list = new ArrayList<>();
List l = Collections.checkedList((List)list, SomeClass.class);
List<SomeClass<String>> list = new ArrayList<SomeClass<String>>();
List l = Collections.checkedList(list, SomeClass.class);
那是我的 code.Eclipse 告诉我有一些错误:
The method
checkedList(List<E>, Class<E>)
in the type Collections is not applicable for the arguments(List<SomeClass<String>>, Class<SomeClass>)
如何使用checkedList?如何更改代码?
Java 无法在运行时检查类型的泛型参数 (How to get a class instance of generics type T),因此 checkedList
将无法强制执行类型的 <String>
部分签名.
您可以添加转换以允许此方法调用,因此 checkedList
将强制仅将 SomeClass<?>
的实例添加到 List
,但您不会拥有完整的类型运行时安全。
您可以将 Class<SomeClass>
转换为原始 Class
以使其编译。
List<SomeClass<String>> list = new ArrayList<>();
List l = Collections.checkedList(list, (Class)SomeClass.class);
请注意,由于 type erasure。
,您无法在运行时检查类型参数问题是您不能在 Java 中拥有 class 通用类型的文字:Java: how do I get a class literal from a generic type? 并且 List
包含 <Foo<Bar>>
您的 class 文字必须是 Foo<Bar>.class
.
无论如何,由于 checkedList
将在运行时添加类型安全检查,您可以尝试使用 dirty 解决方案之一,例如原始类型:
List<SomeClass<String>> list = new ArrayList<>();
List l = Collections.checkedList((List)list, SomeClass.class);