java - 如何确定泛型类型的类?

标签 java generics

我正在创建一个泛型类,并且在其中一种方法中我需要知道当前使用的泛型类型的类。原因是我调用的方法之一期望 this 作为参数。

例子:

public class MyGenericClass<T> {
  public void doSomething() {
    // Snip...
    // Call to a 3rd party lib
    T bean = (T)someObject.create(T.class);
    // Snip...
  }
}

显然,上面的示例不起作用并导致以下错误:类型参数 T 的非法类文字。

我的问题是:有人知道一个好的替代方案或解决方法吗?

最佳答案

还是同样的问题:通用信息在运行时被删除,无法恢复。一种解决方法是在静态方法的参数中传递类 T:

public class MyGenericClass<T> {

    private final Class<T> clazz;

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

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

    public void doSomething() {
        T instance = clazz.newInstance();
    }
}

它很丑,但它有效。

关于java - 如何确定泛型类型的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/182636/

相关文章:

C# 泛型类型 typedef/alias 和 InvalidCastException

java - Android - 在加载到 ImageView 之前调整图像大小以避免 OOM 问题

java - JerseyClient webResource 的问题

java - ASM jar - 为什么我的 java 项目依赖于此?

C# 5.0 简而言之泛型

java - 有人能解释一下 Java 中泛型中原始类型的使用吗?

c# - 如何调用函数序列?

java - 具有多个连接参数的 MySQL 连接字符串?

java - Tuckey Urlrewriter 更改 JS 和 CSS 资源的 url 请求

c# - 如何将通用 "T Value"标记为可以处理?