如果我创建一个通用的java类,例如:
public class Foo<T>
Run Code Online (Sandbox Code Playgroud)
如何确定那个类的内部,'T'到底是什么?
public ???? Bar()
{
//if its type 1
// do this
//if its type 2
// do this
//if its type 3
// do this
//if its type 4
// do this
}
Run Code Online (Sandbox Code Playgroud)
我已经开始使用Java API并使用Reflection的东西,instanceof,getClass,.class等,但我似乎无法对它们做出正面或反面.我觉得我很接近,只需要结合一些电话,但不断提出来.
更具体地说,我试图确定该类是否使用3种可能类型之一进行实例化.
测试(使用反射)的最简单方法是什么,给定方法(即java.lang.Method实例)是否具有返回类型,可以安全地转换为List <String>?
请考虑以下代码段:
public static class StringList extends ArrayList<String> {}
public List<String> method1();
public ArrayList<String> method2();
public StringList method3();
Run Code Online (Sandbox Code Playgroud)
所有方法1,2,3都满足要求.为method1测试它很容易(通过getGenericReturnType(),它返回ParameterizedType的实例),但对于方法2和3,它并不那么明显.我想,通过遍历所有getGenericSuperclass()和getGenericInterfaces(),我们可以非常接近,但我没有看到,如何匹配List <E>中的TypeVariable(它发生在超类接口中的某处)与实际type参数(即此E与String匹配的位置).
或者是否有一种完全不同(更容易)的方式,我忽略了?
编辑:对于那些正在研究它的人,这里是method4,它也满足了要求,并显示了一些必须调查的案例:
public interface Parametrized<T extends StringList> {
T method4();
}
Run Code Online (Sandbox Code Playgroud) 我有一个arraylist,我需要在运行时指定类型.
ArrayList<String> alist = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
我需要在运行时指定类型"String".我怎样才能做到这一点.它不应该是静态的.