-1

爲了讓我的代碼編譯 - 其中包括下列:註釋掉「@Override」是否安全?

public class ContactsActivity extends ListActivity implements AdapterView.OnItemClickListener { 

    Cursor mContacts; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Return all contacts, ordered by name 
     String[] projection = new String[] { ContactsContract.Contacts._ID, 
       ContactsContract.Contacts.DISPLAY_NAME }; 
     mContacts = managedQuery(ContactsContract.Contacts.CONTENT_URI, 
       projection, null, null, ContactsContract.Contacts.DISPLAY_NAME); 

     // Display all contacts in a ListView 
     SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_list_item_1, mContacts, 
       new String[] { ContactsContract.Contacts.DISPLAY_NAME }, 
       new int[] { android.R.id.text1 }); 
     setListAdapter(mAdapter); 
     // Listen for item selections 
     getListView().setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
. . . 

...我不得不註釋掉onItemClick()事件處理上面的「@Override」。這安全嗎?我是否應該聳聳肩,說:「行得通,我會忘記它」,還是有潛在的惡果/隱藏的潛伏問題?

+0

你隱藏了真正的問題。請發佈您遇到的問題和完整的方法代碼。 – sfratini 2012-01-05 03:21:53

回答

4

根據我的建議,刪除該行並不好。您需要在eclipse中更改爲JDK版本,那麼您將不會收到此類錯誤。按照以下步驟操作,

右鍵單擊您的項目&選擇屬性。

然後從左側選擇Java編譯器&選擇您安裝的JDK的版本。如果它已經被選中,那麼取消選擇它&嘗試一下。

4

如果您必須註釋掉@Override,那麼您的編譯器的JDK合規性級別未設置爲1.6,這對於Android開發應該是這樣。如果您使用Eclipse,請右鍵單擊項目名稱並選擇「屬性」。然後選擇「Java Compiler」並根據需要進行調整。 (您可能從工作空間繼承了較低的JDK合規性級別,如果適用,請改爲改爲工作空間的合規性級別,這樣可以避免必須修復新項目中的相同問題。)

但是要回答您的問題:安全地註釋掉@Override。使用較低的合規性級別並不是那麼好。

-1

如果您評論過,則不會覆蓋這些方法。所以你實際上什麼都不做。 (我的意見)

+0

'@ Override'不影響方法是否被覆蓋。從[Java教程](http://docs.oracle.com/javase/tutorial/java/javaOO/annotations.html):_「雖然在重寫方法時不需要使用此註釋,但它有助於防止錯誤如果一個標記爲__ @ Override的方法_正確地覆蓋了它的一個超類中的某個方法,編譯器就會產生一個錯誤。「_ – 2012-01-06 03:47:06

+0

是的,我意識到直接在答案之後......但我不確定; ) – TheWhiteLlama 2012-01-06 10:46:42

3

您java版本設置爲小於1.6。從那裏開始,接口而不僅僅是方法可以被視爲覆蓋。右鍵單擊項目 - >屬性 - > Java編譯器 - >編譯器符合級別爲1.6

1

這取決於。如果你的編譯器被設置爲目標java 5,並且onCreate方法從接口繼承,那麼是的。 Java 5不支持接口方法上的重寫註釋,而Java 6期望它。這本身可能是你的JDK設置錯了,如果你希望的目標的Java 6的指示時,你可能會得到是Java 5的

2

Java docs

@Override - 中@Override註釋通知編譯器, 元素用於覆蓋超類中聲明的元素 (覆蓋方法將在標題爲「接口和繼承」的課程中討論)。

// mark method as a superclass method 
    // that has been overridden 
    @Override 
    int overriddenMethod() { } 

雖然覆蓋方法時,使用此批註它不是必需的,它有助於防止錯誤。如果使用@Override 標記的方法無法正確覆蓋其某個超類中的某個方法,則 編譯器會生成一個錯誤。