2017-08-25 151 views
0

這可能是一個愚蠢的問題,因爲我是android編程的新手。我已經在我的Android項目中導入了一個.aar庫,我試圖在該庫中存在的一個類中訪問受保護的最終同步方法。但是,我可以參考班級中其他未同步/最終的方法。當我打開創建.aar文件的庫的源代碼時,我能夠看到該方法,但在導入之後無法使用它。 enter image description here 請問這裏有什麼問題嗎?無法訪問類中受保護的最終同步方法

+1

https://stackoverflow.com/questions/215497/in-java-difference-between-default-public-protected-and-private – shmosel

回答

2

導入無關與字段和進口類的方法的可訪問性和可見性,只是每次使用課程時不輸入完整課程名稱的快捷方式。

要訪問一個導入方法字段某一類,它們之前改性劑應該被標記爲公共

既然你試圖訪問該方法被標記爲保護,該方法只能如果您正在嘗試到擴展分類BaseActivity子類中訪問,訪問,或者如果你是從相同包的類中訪問它。

解決的辦法是延長BaseActivity,要麼使用您的自定義方法中的方法是這樣的:

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


這樣,你聲明的方法提供了一個公共接口給其他開發者想要使用排隊事件的方法的特定版本。

然而,這不是通過多態性也不與組成完成的,所以你可能需要確保你真正需要此方法,或者是否有其他現有的解決方案,因爲是有原因的,原來的方法被標記爲最終保護這可能會導致其他問題,如果不處理照顧。

介紹訪問修飾符可以在這裏找到:
The Java tutorials - Controlling Access to Members of a Class 在另一方面,這個問題已經沒有任何關係「同步」和「最終」

介紹的關鍵字同步可以在這裏找到:
The Java tutorials - Synchronized Methods

引言關鍵字最後可以在這裏找到:
The Java tutorials - Final Classes and Methods

1

當你說「使用」你是指呼叫/調用或重寫?

A.保護的方法是隻對包可見和亞類

B. final方法不能被重寫

A和B可以用這個方法做的唯一的事情是把它在你的子類。

+0

是的,我無法稱呼它。 –

1

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

要繞過這個錯誤,您可以創建一個類來擴展您的BaseActivity類,然後調用一個公用方法來調用私有方法。

事情是這樣的:

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

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

+1

也可以通過相同包中的類來訪問它 –

相關問題