亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用內部類的方法引用調用超類的受保護方法時

嘗試使用內部類的方法引用調用超類的受保護方法時

慕碼人8056858 2022-10-26 17:08:47
在 Java 8 中,給定 package 中的超類Super和 package 中a的子類Sub,b它們有一個內部類SubInner:// Super.javapackage a;public abstract class Super {   private long value;   protected final void setValue(long value) {      this.value = value;   }}//Sub.javapackage b;public class Sub extends Super {  public void foo() {    new SubInner().foo();  }  private class SubInner {    void foo() {      Optional.of(1L).ifPresent(Sub.this::setValue); // Will throw IllegalAccessError at runtime.      Optional.of(1L).ifPresent(t -> setValue(t)); // However, lambda works.      setValue(1L); // also works.    }  }}我的問題是,為什么方法引用在這種情況下不起作用,而普通方法調用可以訪問超類方法setValue?另外,如果我嘗試這樣做Sub.super::setValue,代碼將無法編譯,并且錯誤似乎與運行時錯誤一致:setValuehas protected access in a.Super.Exception in thread "main" java.lang.BootstrapMethodError: java.lang.IllegalAccessError: tried to access method a.Super.setValue(J)V from class b.Sub$SubInner    at b.Sub$SubInner.foo(Sub.java:14)    at b.Sub.foo(Sub.java:10)    at b.Sub.main(Sub.java:22)Caused by: java.lang.IllegalAccessError: tried to access method a.Super.setValue(J)V from class b.Sub$SubInner    at java.lang.invoke.MethodHandleNatives.resolve(Native Method)    at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:975)    at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1000)    at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1394)    at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1750)    at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)    ... 3 more
查看完整描述

1 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

它看起來很像這個錯誤,已修復......

我在本地沒有 java-9 來確認它確實在 java-9 中修復為錯誤狀態;但在 java-11 和 java-12 下工作得很好。這不是第一次在處理 lambda/方法引用方面出現異常javac/java;通常 lambda 是方法引用的解決方法,反之亦然。


查看完整回答
反對 回復 2022-10-26
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號