带有泛型的 Java 反射方法调用

标签 java generics reflection

给定这个方法:

public final void foo (List<MyClass> bar){ .. }

我希望能够反射性地调用这个方法。为了让 getMethod 起作用,我必须将其更改为:

public final void foo (List bar){ .. }

由于显而易见的原因,这似乎不正确,但 getMethod 的输入组合似乎没有其他效果。我在谷歌上到处搜索都无济于事。有什么建议吗?

干杯,谢谢!

最佳答案

import java.util.*;
import java.lang.reflect.*;
public class Test {
    public final void foo (List<String> bar){
        for(String x : bar)
            System.out.println(x);
    }
    public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        Test x = new Test();
        List<String> y = new ArrayList<String>(); y.add("asd"); y.add("bsd");
        x.getClass().getMethod("foo",List.class).invoke(x,y);
    }
}

你可以只使用getMethod("foo",List.class)并使用 List.class作为一般信息 List<String>仅在编译时使用。在运行时,方法签名看起来像

public final void foo (List bar)

与编译时类型删除一样,删除了通用信息。

关于带有泛型的 Java 反射方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1753084/

相关文章:

"in jar"图像在css中的JavaFX用法

c++ - 使用仿函数的返回类型来声明模板方法的返回类型,而不使用 decltype

c# - 如何获取主键

typescript - 将接口(interface)中的字段类型替换为 promise

java - 泛型方法的不同返回类型取决于调用位置

c# - 从 StackFrame 获取类型 T

c# - 如何序列化和处理通用类型中所有事件的订阅?

java - fragment 中的 ListView 空指针异常

java - 在不向用户显示而是在后面处理的JSP页面中集成sql语句是否可取?

java - 更改现有应用程序的 admob id