如何使用类型变量在java中创建参数化类型?

如何使用类型变量在java中创建参数化类型?,java,class,generics,reflection,types,Java,Class,Generics,Reflection,Types,问题的标题可能有误导性,但我不知道如何更好地总结我想完成的内容。所以,请通读这篇文章来理解我想要实现的目标 我有一个带有类型参数的方法,它可以获取一些类(例如MyClass)。我需要创建一个类型的列表并返回它 我以为这个代码可以解决我的问题。但实际的行为让我大吃一惊 public <T> Type getListClass(Class<T> cls) { Type type = new TypeToken<ArrayList<T>>

问题的标题可能有误导性,但我不知道如何更好地总结我想完成的内容。所以,请通读这篇文章来理解我想要实现的目标

我有一个带有类型参数的方法,它可以获取一些类(例如MyClass)。我需要创建一个类型的列表并返回它

我以为这个代码可以解决我的问题。但实际的行为让我大吃一惊

    public <T> Type getListClass(Class<T> cls) {
    Type type = new TypeToken<ArrayList<T>>() {}.getType();
    return type;
}
公共类型getListClass(类cls){
Type=newtypetoken

调试器:

我检查了type2,我们可以看到它的rawType为Arraylist,typeArgument为Integer。我希望我的泛型类型也是这样

但是在变量type中,我们观察到一个rawType为Arraylist和类型参数为T。相反,我希望它是一个具体的类(比如IntegerMyCLass).基本上我需要一个通用的列表类型,但在执行点上是具体的。有什么方法可以完成吗

-----编辑1-----

这不是这个问题的重复:
那里的答案产生与我的代码相同的结果。

由于类型擦除,运行时
T
参数在
getListClass
中不可用,但您可以使用
TypeToken。其中
(from)使用
cls
构建类型:

public <T> Type getListClass(Class<T> cls) {
    Type type = new TypeToken<ArrayList<T>>() {}.where(new TypeParameter<T>() {}, cls).getType();
    return type;
}
公共类型getListClass(类cls){
Type Type=new-TypeToken(){}.where(new-TypeParameter(){},cls.getType();
返回类型;
}

这回答了你的问题吗?@Milgo我没有。那里的答案与我的方法产生的结果相同。它看起来很有希望,但突然我无法访问“where”方法。文档中也没有这个方法。你使用的是另一个TypeToken类吗?明白了,它是guava我的错,我假设你使用的是guava,我应该在回答中提到它。很高兴它在任何情况下都能工作。