相关疑难解决方法(0)

Java通用类 - 确定类型

如果我创建一个通用的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 generics

49
推荐指数
3
解决办法
7万
查看次数

如何测试方法返回类型是否与List <String>匹配

测试(使用反射)的最简单方法是什么,给定方法(即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)

java generics reflection

15
推荐指数
2
解决办法
1万
查看次数

如何在运行时指定genric类型

我有一个arraylist,我需要在运行时指定类型.

ArrayList<String> alist = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

我需要在运行时指定类型"String".我怎样才能做到这一点.它不应该是静态的.

java

1
推荐指数
1
解决办法
196
查看次数

标签 统计

java ×3

generics ×2

reflection ×1