如何通过.class获得泛型?

用户名

有问题的代码如下所示。

class GenericClass<T> {
    // ...
}

class RegisterHandler<T> {
    // ...
    public void register( Class<T> klazz ) {
        // do something
    }
    // ...
}

class GenericClassRegisterHandler extends RegisterHandler<GenericClass<?>> {
    // ...
}

public static void registerAll() {
    // ...
    new GenericClassRegisterHandler().register( GenericClass.class );
    // error: actual argument Class<GenericClass> cannot be converted to Class<GenericClass<?>> by method invocation conversion
    // ...
}

唯一的方法是使用原始类型,方法是更改registerClass klazz而不是Class<T>或强制转换new GenericClassRegisterHandler()(RegisterHandler)new GenericClassRegisterHandler()由于这两个“修复”都利用了原始类型,并且我不想使用它们(为什么?我应该能够以Class<GenericClass<?>>某种方式获得.class!),但是到目前为止,我还没有其他解决方案。我是否遗漏了一些明显的东西,并且可能不修改包装等而已,还是根本不可能?

注意:包装Class <?>类型泛型错误是一个不错的启发性发现,但在这里不起作用。

注意2:在EJ 2nd中的Bloch讨论类似问题时,我无法找到针对此确切情况的任何明确解决方案。

顺便说一句,(Class<GenericClass<?>>) GenericClass.class由于以下原因显然不起作用incompatible types: Class<GenericClass<?>> cannot be converted to Class<GenericClass>

http://ideone.com/Fr4yng上的测试代码段

用户名

我的解决方案是进行双重转换。

 new GenericClassRegisterHandler()
    .register( (Class<GenericClass<?>>) (Class<?>) GenericClass.class );

虽然它可能不是最优雅的,但是在某些情况下(例如,您是生产者,而消费者的界面是固定的,或者您不想出于任何其他原因进行更改),它是最好的-因为这是唯一的可能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得泛型的Class <?>对象

来自分类Dev

如何获得泛型的Class <?>对象

来自分类Dev

如何通过基本接口的泛型传递Class对象?

来自分类Dev

如何获得嵌套的泛型类型

来自分类Dev

如何获得继承的泛型类型

来自分类Dev

如何获得 T 泛型的类型?

来自分类Dev

如何在显示的javadoc代码块中获得泛型?

来自分类Dev

如何通过泛型类型实例化?

来自分类Dev

如何使用泛型正确指定Class <?>参数

来自分类Dev

如何通过泛型快速实现对象合并?

来自分类Dev

如何通过泛型列表作为构造函数?

来自分类Dev

如何通过传递的保护函数来缩小泛型类型?

来自分类Dev

如何通过泛型快速实现对象合并?

来自分类Dev

如何通过泛型列表作为构造函数?

来自分类Dev

C#如何通过泛型动态返回实例

来自分类Dev

如何仅通过泛型类型 T 创建实例

来自分类Dev

如何通过传递泛型类型创建多种用途的函数

来自分类Dev

如何创建泛型的泛型列表?

来自分类Dev

泛型C#如何通过参数传递泛型对象的属性

来自分类Dev

如何通过非泛型的子类从父类正确访问泛型方法?

来自分类Dev

如何获得对具有指定类型的泛型类的构造函数的引用?

来自分类Dev

如何在注解处理中获得泛型类型的合格类名?

来自分类Dev

如何获得泛型类型作为交换输入主体而不是强制转换?

来自分类Dev

如何获得此Java泛型代码以使其正常工作?

来自分类Dev

如何获得动态/泛型类型的第一个元素

来自分类Dev

如何创建泛型?

来自分类Dev

如何使用泛型

来自分类Dev

如何使用泛型?

来自分类Dev

如何使用泛型