我正在查看我的应用程序的一些崩溃日志,堆栈跟踪显示如下内容:
at MyActivity.formatDouble(MyActivity.java:182)
at MyActivity.access$47(MyActivity.java:196)
at MyActivity$28.onCameraChange(MyActivity.java:167)
“MyActivity”是一个 Activity ,因此不是匿名内部类。我不能确定第 3 行中的美元符号(以及第 2 行中的美元符号)
我怀疑第 167 行在一个匿名类 within MyActivity
中,而 access$47
只是一个允许 onCameraChange
调用 MyActivity
中的私有(private)方法。 (JVM 不允许这样做,因此 Java 编译器创建了一个允许这样做的方法。)
您可以通过一个简单的 Java 类轻松地看到这一点,甚至在 Android 上也不行:
public class Test {
private static void privateMethod() {
throw new RuntimeException();
}
public static void main(String[] args) throws Exception {
Runnable runnable = new Runnable() {
@Override public void run() {
privateMethod();
}
};
runnable.run();
}
}
这给出了一个类似于您所显示的堆栈跟踪:
Exception in thread "main" java.lang.RuntimeException
at Test.privateMethod(Test.java:4)
at Test.access$000(Test.java:1)
at Test$1.run(Test.java:10)
at Test.main(Test.java:13)
Test$1.run
位于 main
的匿名内部类中,access$000
方法提供对 的访问私有(private)方法
.