簡體   English   中英

無法訪問類中受保護的最終同步方法

[英]Unable to access protected final synchronized method in a class

這可能是一個愚蠢的問題,因為我是android編程的新手。 我已經在我的android項目中導入了一個.aar庫,我試圖在該庫中存在的類之一中訪問受保護的最終同步方法。 但是,我可以引用該類中存在的其他方法,這些方法不是同步的/最終的。 當我打開從中創建.aar文件的庫的源代碼時,可以看到該方法,但在導入后無法使用它。 在此處輸入圖片說明 你能告訴我這里出了什么問題嗎?

導入與導入類的字段和方法的可訪問性和可見性無關,它只是每次使用該類時不鍵入完整類名的快捷方式。

要訪問某個類的導入方法字段 ,應將位於它們前面的修飾符標記為public

由於嘗試訪問的方法被標記為protected ,因此僅當您嘗試在擴展類BaseActivity的子類中訪問該方法時 ,或者從同一包的類中訪問該方法時,才可以訪問該方法。

解決方案是擴展BaseActivity並在您的自定義方法中使用該方法,如下所示:

public class SomeOtherActivity extends BaseActivity{
    public void someOtherMethod(Runnable task, long delayMillis){
        super.queueEvent(task,delayMills);
    }
}


這樣,您聲明的方法為想要使用排隊事件的方法的特定版本的其他開發人員提供了公共接口。

但是,這不是通過多態或通過組合來完成的,因此您可能必須確保確實需要此方法,或者是否存在其他現有解決方案,因為存在將原始方法標記為final受保護的原因,這可能會導致其他原因。問題,如果不小心處理。

訪問修飾符的介紹可以在這里找到:
Java教程-控制對類成員的訪問另一方面,此問題與“同步”和“最終”無關

您可以在此處找到關鍵字sync的介紹:
Java教程-同步方法

關鍵字final的介紹可以在這里找到:
Java教程-最終類和方法

當您說“使用”時,您的意思是呼叫/調用或覆蓋?

A.受保護的方法僅對包和子類可見

B.最終方法不能被覆蓋

對於A和B,使用該方法唯一可以做的就是在子類中調用它。

受保護的方法只能由擴展主類的類調用。

要繞過您遇到的錯誤,可以創建一個擴展BaseActivity類的類,然后創建一個調用私有方法的公共方法。

像這樣:

class MyBaseActivity extends BaseActivity {
    public final synchronized void myQueueEvent(Runnable task, long delayMillis) {
        super.queueEvent(task, delayMillis);
    }
}

現在,您可以通過以下方式使用它: MyBaseActivity.myQueueEvent(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM