首页 > Java > java教程 > 正文

如何在运行时确定泛型类型的类?

Mary-Kate Olsen
发布: 2024-11-19 02:12:02
原创
460 人浏览过

How Can You Determine the Class of a Generic Type at Runtime?

确定泛型类型的类

在泛型编程领域内,确定泛型类型的类是必要的被利用。然而,由于泛型的本质,类型信息通常会在运行时被删除,这给以后检索它带来了挑战。

示例:

考虑以下泛型class:

public class MyGenericClass<T> {
  public void doSomething() {
    // ...
    T bean = (T)someObject.create(T.class);
    // ...
  }
}
登录后复制

在上面的示例中,我们尝试通过传递类文字来创建类 T 的实例。但是,这将导致“类型参数 T 的类文字非法”错误,因为禁止尝试使用泛型类型作为类文字。

解决方法:

为了克服这一挑战,一个可行的解决方法是将泛型类型的类作为参数传递给静态方法。然后,此方法将使用反射 API 来实例化泛型类型。

public class MyGenericClass<T> {

    private final Class<T> clazz;

    public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) {
        return new MyGenericClass<>(clazz);
    }

    protected MyGenericClass(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void doSomething() {
        T instance = clazz.newInstance();
    }
}
登录后复制

通过遵循此方法,我们规避了使用泛型类型作为类文字的限制,确保必要的类型信息在运行时可用。虽然它可能是一个不优雅的解决方案,但它提供了一种在具有挑战性的上下文中确定泛型类型的类的方法,如原始示例中所示。

以上是如何在运行时确定泛型类型的类?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板