任何人都可以解释这段代码我是java的新手
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
答案 0 :(得分:4)
这称为反射。它在运行时而不是编译时访问类,对象和方法。它也不是特定于Android的。
“Java的Reflection API可以在运行时检查类,接口,字段和方法,而无需在编译时知道类,方法等的名称。还可以实例化新对象,调用方法并获取/使用反射设置字段值。“
答案 1 :(得分:3)
Java Reflection 允许执行的Java程序检查或“内省”自身,并操纵程序的内部属性。例如,Java类可以获取其所有成员的名称并显示它们。
对Class.forName("X")
的调用导致名为X的类被动态加载(在运行时)。对forName(“X”)的调用导致名为X的类被初始化(即,JVM在类加载后执行其所有静态块)。 Class.forName("X")
返回与“X”类关联的Class对象。返回的Class对象不是“x”类本身的实例。
Class.forName("X")
加载该类(如果尚未加载)。 JVM跟踪先前已加载的所有类。此方法使用调用它的类的类加载器。 “X”是所需类的完全限定名称。
getDeclaredMethod()
第二步是调用getDeclaredMethod之类的方法来获取类声明的参数中给出的方法。
请查看此信息以获取更多信息Reflection
答案 2 :(得分:2)
telephony.getClass().getName()
提取包含对象telephony
的完全限定类名的字符串。
Class.forName(...)
使用完全限定名称检索Class对象。
c.getDeclaredMethod("getITelephony")
通过反射检索名为Method
的{{1}}。
BTW所有这些可以重写为:"getITelephony"
答案 3 :(得分:1)
这将返回与他telephony
变量关联的类的名称:
telephony.getClass().getName()
这将返回对具有您之前获得的名称的类的引用:
telephony.getClass().getName()
这有点毫无意义,因为你可以这样做:
Class c = telephony.getClass();
第二行返回对Method
类的getITelephony
对象的引用。
答案 4 :(得分:0)
可能你正试图在android中自动接收来电...
但重要的是,谷歌已经阻止了这一点,因为ITelephony是一个私有API。
如果您认为这回答了您的问题,请将其标记为“已接受”。这将提高您和我的声誉分数。