相关疑难解决方法(0)

Class.getMethod()反射和自动装箱的任何解决方案?

我想用

Class.getMethod(String name, Class... parameterTypes)
Run Code Online (Sandbox Code Playgroud)

找到我需要使用给定参数调用的方法,但显然如Bug 6176992中所述,Java不包括那里的自动装箱.因此,如果我的反射类有一个带有(String,int)签名的方法,你仍然会得到一个带有{String.class,Integer.class}数组作为参数的NoSuchMethodException.

这有什么解决方法吗?我能想到的唯一方法是调用getMethod()来处理原始和非原始类型的每个排列,我并不是真的想做.

编辑:为了使它更清楚:我很清楚原始类型类,但我不知道它们如何帮助解决我的问题.我的parameterTypes数组来自某个地方,我知道它只会返回非原始类型.我不能假设接口只会用原始类型声明,这正是我的问题:

public interface TestInterface()
{
    public void doTest(Integer i1, int i2, double d3, Double d);
}

Class<?>[] classes = { Integer.class, Integer.class, Double.class, Double.class }
// Due to autoboxing I should become the doTest method here, but it doesn't work
TestInterface.class.getMethod("doTest", classes);
Run Code Online (Sandbox Code Playgroud)

java reflection

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

使用java.lang.reflect.getMethod和多态方法

请考虑以下代码段:

public class ReflectionTest {

    public static void main(String[] args) {

        ReflectionTest test = new ReflectionTest();
        String object = new String("Hello!");

        // 1. String is accepted as an Object
        test.print(object);

        // 2. The appropriate method is not found with String.class
        try {
            java.lang.reflect.Method print
                = test.getClass().getMethod("print", object.getClass());
            print.invoke(test, object);
        } catch (Exception ex) {
            ex.printStackTrace(); // NoSuchMethodException!
        }
    }

    public void print(Object object) {
        System.out.println(object.toString());
    }

}
Run Code Online (Sandbox Code Playgroud)

getMethod()显然不知道a String可以被提供给一个期望的方法Object(事实上​​,它的文档说它寻找具有指定名称和完全相同的形式参数类型的方法).

是否有一种直接的方法来反复查找方法,就像getMethod()这样,但考虑到多态性,以便上面的反射示例可以print(Object)在查询 …

java reflection polymorphism

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

标签 统计

java ×2

reflection ×2

polymorphism ×1