Java 反射执行构造函数
我需要通过反射执行一些方法 要执行的方法Java 反射执行构造函数,java,android,reflection,Java,Android,Reflection,我需要通过反射执行一些方法 要执行的方法 public void someMethod(int value1, int value2, String str, int value3) { try { // some code } catch (Exception e) { e.printStackTrace(); } } 这是执行代码 public static void execute() { try
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?您需要在同一类(SomeClass)中创建任何参数构造函数,如下所示:
若要在有参数化构造函数时创建新实例,需要首先获取构造函数,然后调用带有参数的
newInstance()
如果您有一个类,其构造函数有两个类型为Context
和SomeClass
的参数,则该类的实例化如下所示
Object object = clazz.getDeclaredConstructor(Context.class, SomeClass.class)
.newInstance(context, someClass);
谢谢!但我忘了:第二个参数是服务。现在我不知道如何设置第二个参数
Object object = clazz.getDeclaredConstructor(Context.class, SomeClass.class)
.newInstance(context, someClass);