2016-09-18 64 views
0

Eclipse有一個自動的Java清理被稱爲:靜態成員直接訪問Eclipse的Java的清理功能

變化間接訪問(通過亞型訪問)「`

是什麼這意味着

編輯:請注意,還有另外一個是

改變非靜態使用聲明類型訪問靜態成員

所以我的詢問的主題必須與此不同。

這些在Windows > Preferences > Java > CodeStyle > Clean-Up這幾乎是不可能找到,因爲它在Windows

+0

靜態成員將通過它聲明的類來調用。 – user1803551

+0

請參閱我的編輯。我認爲有一個已經做到了。 – H2ONaCl

+0

我的評論依然存在。請參閱我的回答以獲取有關兩者的解釋。 – user1803551

回答

1

假設你有類

class A { 

    static int i; 
} 

然後

改變靜態成員直接訪問間接訪問(通過亞型訪問)

指的是你有一個案例另一類

class B extends A {} 

,寫

B.i = 2; 

在這種情況下,清理將其更改爲

A.i = 2; 

,因爲(我在評論中寫道)的靜態成員將通過在它的聲明的類訪問(A),而不是通過繼承它的類(B)。

靜態成員

改變非靜態訪問使用聲明類型

指的是你寫

A a = new A(); 
a.i = 2; 

在這種情況下,清理將其更改爲

A.i = 2; 
的情況下,

由於靜態成員將通過類訪問(A)而不是通過類的實例(a)。

1

這解決了在一個類中有靜態方法的情況,但是您使用子類的名稱來調用它。所以,靜態方法可能是

SuperClass.someStaticMethod(); 

但你引用它作爲

SubClass.someStaticMethod(); 

注意,它類似於另一清理,在那裏你在的地方調用靜態方法,如myObject.someStaticMethod();TheClass.someStaticMethod();。圓括號中的部分表示它是「通過子類型訪問」清理。

0

你正在調用你的靜態變量/方法通過對象而不是它定義的類。當它聲明'通過聲明類型'時,這意味着你將變量/方法聲明爲類變量/方法,你應該通過它來調用它。

+1

但這聽起來像第二個。 – H2ONaCl

+0

如果你仔細閱讀,這兩個錯誤都會說同樣的話。編譯器有多個語法錯誤消息,這些消息被不同的語法錯誤激活。有時單個語法錯誤會觸發兩個不同的錯誤消息。 –

+1

這些都不是錯誤。他們是清理程序。如果有多個程序,那麼它們必須不同。 – H2ONaCl