我有一个通用界面,我们称之为
GenericInterface<T>
。我需要将该接口的“类对象”传递给一个需要(通过另一个类型参数指定)该类型的特定实例的方法。假设我想打电话给 java.util.Collections.checkedList()
:List<GenericInterface<Integer>> list = Collections.checkedList(
new ArrayList<GenericInterface<Integer>>(),
GenericInterface.class);
这不起作用,因为
Class<GenericInterface>
不能隐式转换为
Class<GenericInterface<Integer>>
,最类型安全的方法是什么?我能想到的最好的办法是:List<GenericInterface<Integer>> list = Collections.checkedList(
new ArrayList<GenericInterface<Integer>>(),
(Class<GenericInterface<Integer>>) (Class<?>) GenericInterface.class);
它可以工作,但不能保护我免受例如将列表的类型更改为
List<SomeOtherInterface>
,而不用
SomeOtherInterface.class
替换类对象参数。