Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反射执行构造函数_Java_Android_Reflection - Fatal编程技术网

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);