小编典典

获取通用类的通用参数的类型名称

java

使用泛型时,我在Java中有一个小问题。我有一堂课A

public class A<T>

在方法中A,我需要获取类型名称T。有没有办法找到字符串s使用T

(如果创建了A<String> temp = new A<String>();,我希望能够做到java.lang.String这一点-
我必须使用通用性,因为我的方法之一必须返回List<T>)。

这似乎很容易,但是我不知道如何去做。


阅读 218

收藏
2020-09-16

共1个答案

小编典典

由于 类型擦除, 您通常无法执行此操作-的实例A<String>知道 的类型T。如果需要,一种方法是使用类型文字:

public class A<T>
{
    private final Class<T> clazz;

    public A<T>(Class<T> clazz)
    {
        this.clazz = clazz;
    }

    // Use clazz in here
}

然后:

A<String> x = new A<String>(String.class);

这很丑陋,但这就是类型擦除的作用:(

另一种选择是使用类似Guice的东西TypeLiteral。之所以有效,是因为不会删除用于指定
超类 的type参数。因此,您可以执行以下操作:

A<String> a = new A<String>() {};

a现指 _子类_的A<String>通过获取,所以a.getClass().getSuperClass()你最终可以得到回String。不过,这太可怕了。

2020-09-16