2013-07-17 34 views
0

我聲明瞭以下接口:Java接口領域編制不良修飾符

public interface SQLSyncAble 
{ 
    boolean modified = true; 
    long id = -1; 

    static HashMap<String,SQLAction> SQLModifiers = new HashMap<String,SQLAction>(); 
    static Field[] SQL_Object_Fields = null; 
    static DataType[] TransferDataTypes = null; 
} 

在其他班,在那裏我會像設置其實現此接口的對象,我得到的編譯錯誤:

someobject.id = 10 // The final field SQLSyncAble.id cannot be assigned. 
        //The static field SQLSyncAble.id should be accessed in a static way. 

LOL是什麼? 「id」和「modified」不是「static final」,我讓我們看看編譯過的.class文件(即在Java組件編輯器和eclipse中檢查過),真的!每次(通過eclipse或java無關緊要)在所編譯的類中,所有字段都將具有「static final」修飾符。但爲什麼?

如果我修改此接口爲「抽象類」,問題立即消失。

...但它只是一半的解決方案,java只允許超類之一。

爲什麼遵守我的接口與不受歡迎的修飾符?

+0

隨着顯示的代碼,你可能正在尋找一個抽象類,而不是一個接口。 – GriffeyDog

回答

2

根據定義,接口的所有字段標記爲static final

如果您需要非靜態的非最終成員,您應該有一個圍繞界面的類。

+0

看起來我必須使用抽象類,但是什麼原因是界面靜態最終的所有字段? –

0

初始化後,您無法更改最終變量。

我們在接口中隱式地定義了公共,靜態和最終的所有字段。你再次在界面中分配了一個值,並且你稍後嘗試更改,所以你不能這樣做。

+0

請解釋爲什麼。 – hexafraction