java - 反射。执行构造函数

标签 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
    {
        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/

相关文章:

c# - 实例化所有实现通用接口(interface)实例的类

java - 使用 Seekbar 更改 Fragment 类中的 TextView 值

java - 一旦我们将鼠标悬停在 Eclipse 编辑器中,就不会调用 getTitleTooltip 方法

android - 如果新数据到达 Android,则从套接字读取数据

c# - Android 上的 Xamarin.Forms ListView OutOfMemoryError 异常

oop - 使用反射是否被认为是不面向对象的?

Java 程序不会传输大于 64KB 的文件

java - AmazonS3Client 中 getContinuationToken 和 getNextContinuationToken 之间的区别

java - 在android中读取xml的最佳方式是什么?

c# - 什么更快 : expression trees or manually emitting IL