gpt4 book ai didi

java - 反射。执行构造函数

转载 作者:行者123 更新时间:2023-12-02 05:02:36 25 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.TYPE, Integer.TYPE, String.class, Integer.TYPE);
Object object = clazz.newInstance();

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

但是我收到错误

    java.lang.InstantiationException: can't instantiate class someClass; no empty constructor
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1208)

之后我检查了 someClass 的构造函数并得到了这个

someClass(android.content.Context,com.android.internal.someClass)
GenericParameterType 0 - class android.content.Context
GenericParameterType 1 - interface com.android.internal.someClass.someService

问题是:如何使用给定参数和给定泛型类型执行 someMethod?

最佳答案

当有参数化构造函数时,要创建新实例,您需要先获取构造函数,然后使用参数调用 newInstance()

如果您有一个类,其构造函数有两个类型为 ContextSomeClass 的参数,则该类的实例化将如下所示。

Object object = clazz.getDeclaredConstructor(Context.class, SomeClass.class)
.newInstance(context, someClass);

关于java - 反射。执行构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28110223/

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