gpt4 book ai didi

java - 反射。执行带参数的非静态方法

转载 作者:行者123 更新时间:2023-12-01 22:29:35 24 4
gpt4 key购买 nike

我需要通过反射执行一些方法

执行方法

public void someMethod(int value1, int value2, String str, int value3)
{
try
{
// some code
}
catch (Exception e)
{
e.printStackTrace();
}
}

这是执行代码

public static void execute()
{
try
{
String className = "some.class";
String classPath = "some.pack.name" + ":" + "some.class";
PathClassLoader loader = new dalvik.system.PathClassLoader(classPath, ClassLoader.getSystemClassLoader());

Class clazz = Class.forName(className, true, loader);
Method method = clazz.getDeclaredMethod("someMethod", Integer.class, Integer.class, String.class, Integer.class);
Object object = clazz.newInstance();

method.invoke(object, 1, 2, "str", 3);
}
catch (Throwable e) {e.printStackTrace();}
}

但是我收到错误

01-22 21:44:52.286: W/System.err(10877): java.lang.NoSuchMethodException: someMethod [class java.lang.Integer, class java.lang.Integer, class java.lang.String, class java.lang.Integer]
01-22 21:44:52.286: W/System.err(10877): at java.lang.Class.getConstructorOrMethod(Class.java:472)
01-22 21:44:52.286: W/System.err(10877): at java.lang.Class.getDeclaredMethod(Class.java:640)

我做错了什么?

最佳答案

类文字Integer.class 表示Integer 类,而不是int 原始数据类型。查找方法时,反射不会执行从 Integerint 的拆箱转换。

使用Integer.TYPE表示 int 原始类型。

The Class instance representing the primitive type int.

Method method = clazz.getDeclaredMethod("someMethod", Integer.TYPE, Integer.TYPE, String.class, Integer.TYPE); 

您还可以使用类文字int.class,如 Section 15.8.2 of the JLS状态:

A class literal is an expression consisting of the name of a class, interface, array, or primitive type, or the pseudo-type void, followed by a '.' and the token class.

(粗体强调我的)

关于java - 反射。执行带参数的非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com