在java中使用反射调用Singleton类中的方法

在java中使用反射调用Singleton类中的方法,java,android,reflection,singleton,Java,Android,Reflection,Singleton,我有以下课程: Public class ABCinfo { private static ABCinfo instance = null; Public static ABCinfo getInstance(Param param); // get instance Private ABCinfo(Param); // making a Singleton class Public void methodA(Param1 param1); // need to

我有以下课程:

Public class ABCinfo { 
    private static ABCinfo instance = null;
    Public static ABCinfo getInstance(Param param); // get instance
    Private ABCinfo(Param); // making a Singleton class
    Public void methodA(Param1 param1); // need to invoke this method
}
使用java中的反射,如何调用
methodA()
。 基本上,我正在编写一个Android应用程序,我想在手机中已经存在的(假设它一直存在)应用程序中使用这个方法

以下是我尝试过的事情:

String apkName = activity.getPackageManager().getApplicationInfo(packageName, 0).sourceDir;

PathClassLoader myPathClassLoader =
    new dalvik.system.PathClassLoader(
    apkName,
    ClassLoader.getSystemClassLoader());

Class<?> handler = Class.forName(className, true, myPathClassLoader);
Method m0 = handler.getDeclaredMethod("getInstance", new Class[] { Param.class  });
m0.setAccessible(true);
Object b = m0.invoke(null, new Object[]{ Param});
Method m = handler.getMethod("methodA", new Class[] { Param1.class});
Param1 methodParameter = "asdf";
Object b1 = m.invoke(b, new Object[] { methodParameter });
String apkName=activity.getPackageManager().getApplicationInfo(packageName,0).sourceDir;
PathClassLoader myPathClassLoader=
新的dalvik.system.PathClassLoader(
阿普克纳姆,
getSystemClassLoader());
Class handler=Class.forName(className,true,myPathClassLoader);
方法m0=handler.getDeclaredMethod(“getInstance”,新类[]{Param.Class});
m0.setAccessible(真);
对象b=m0.invoke(null,新对象[]{Param});
方法m=handler.getMethod(“methodA”,新类[]{Param1.Class});
Param1 methodParameter=“asdf”;
objectb1=m.invoke(b,新对象[]{methodParameter});

但是它仍然不起作用。

我找到了下面的解决方案

Object b1 = m.invoke(handler.newInstance(), new Object[] { methodParameter });

您无法访问属于另一个Android应用程序的
Class
es。考虑一下前面提到的A类<代码>服务<代码>,并通过<代码>意图<代码> >进行通信。方法是可访问的。ThanksHow您是否能够在ABCinfo类型的处理程序上调用newInstance?ABCinfo的构造函数是私有的,不能实例化此类。除非您在ABCinfo中做了一些其他更改,否则您的解决方案不会也不会起作用。您通过传递“b”而不是handler.newInstance()的实际代码对我起到了作用。