如何将泛型类型的类对象转换为该类型的特定实例

Feu*_*mel 5 java generics casting

我有一个通用接口,让我们称之为GenericInterface<T>. 我需要将该接口的类对象传递给期望(通过另一个类型参数指定)该类型的特定实例的方法。让我们假设我想打电话java.util.Collections.checkedList()

List<GenericInterface<Integer>> list = Collections.checkedList(
    new ArrayList<GenericInterface<Integer>>(),
    GenericInterface.class);
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为Class<GenericInterface>不能隐式转换为Class<GenericInterface<Integer>>,最安全的方法是什么?我能想到的最好的是:

List<GenericInterface<Integer>> list = Collections.checkedList(
    new ArrayList<GenericInterface<Integer>>(),
    (Class<GenericInterface<Integer>>) (Class<?>) GenericInterface.class);
Run Code Online (Sandbox Code Playgroud)

它有效但不会保护我免于例如将列表的类型更改为List<SomeOtherInterface>而不将类对象参数替换为SomeOtherInterface.class.

Ter*_*for -1

还有类似的问题:

简而言之,Java 中没有办法找出泛型类型参数的运行时类型。

  • 但这比我开始时的类型安全性要差!在我的第二个示例中,_仅_调用 `checkedList()` 的第二个参数不是类型安全的。 (4认同)
  • 这并没有解决我的问题。这可能符合“checkedList()”的实现者的利益,但我只需要将具有正确非泛型类型的“Class”实例传递给具有泛型类型的参数。 (3认同)