java 类 美元符,java – 在Android日志中的活动类名称后面的美元($)符号(非匿名内部类)...

这篇博客解释了在Java Android应用中遇到的堆栈跟踪问题,涉及到匿名内部类和访问私有方法的机制。作者指出,第167行的onCameraChange可能在匿名内部类中,而access$47是一个辅助方法,用于从内部类中调用MyActivity的私有方法。这种转换是由Java编译器为了符合JVM规则而进行的。
摘要由CSDN通过智能技术生成

at MyActivity.formatDouble(MyActivity.java:182)

at MyActivity.access$47(MyActivity.java:196)

at MyActivity$28.onCameraChange(MyActivity.java:167)

“MyActivity”是一项活动,因此不是匿名的内部类.我不能确定#3线上的美元符号(以及第2行中的美元符号)

解决方法:

我怀疑第167行是在MyActivity中的匿名类中,并且访问$47只是一个trampoline方法,允许onCameraChange在MyActivity中调用私有方法. (JVM不允许这样做,因此Java编译器会创建一个允许它的方法.)

您甚至可以使用简单的Java类轻松地看到这一点:

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中的匿名内部类中,访问$000方法提供对privateMethod的访问.

标签:java,android,debugging

来源: https://codeday.me/bug/20190612/1226814.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值