注释掉“@Override”是否安全?

时间:2012-01-05 03:19:47

标签: java android android-listview android-contacts android-activity

让我的代码编译 - 包含以下内容:

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”。这样安全吗?我应该耸耸肩说:“好吧,那可行,我会忘记它”或者是否存在邪恶/潜伏的隐藏问题?

6 个答案:

答案 0 :(得分:4)

如果你必须注释掉@Override,那么你的编译器的JDK合规性级别不会设置为1.6,这应该是Android开发的。如果您正在使用Eclipse,请右键单击项目名称并选择“属性”。然后选择“Java Compiler”并根据需要进行调整。 (您可能从工作空间继承了较低的JDK合规性级别。如果合适,请更改工作空间的合规性级别。这将节省必须解决新项目的相同问题。)

但回答你的问题:评论@Override是安全的。使用较低的合规水平并不是那么好。

答案 1 :(得分:4)

根据我的建议,删除该行是不好的。你需要在你的eclipse中更改为JDK版本然后你不会得到这样的错误。按照以下步骤进行操作

右键点击您的项目&amp;选择属性。

然后从左侧部分选择Java Compiler&amp;选择您安装的JDK的版本。如果它已被选中,则取消选择它&amp;试试吧。

答案 2 :(得分:3)

您的java版本设置为小于1.6。从那里开始,接口而不仅仅是方法可以作为覆盖市场。右键单击项目 - &gt;属性 - &gt; Java编译器 - &gt;编译器合规性级别为1.6

答案 3 :(得分:2)

来自Java docs

  

@Override - @Override注释通知编译器   element用于覆盖超类中声明的元素   (重写方法将在标题为的课程中讨论   “接口和继承”)。

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

虽然在覆盖方法时不需要使用此批注,但它有助于防止出错。如果方法标有@Override   无法正确覆盖其超类之一的方法,   编译器生成错误。

答案 4 :(得分:1)

这取决于。如果您的编译器设置为目标java 5,并且onCreate方法继承自接口,则为yes。 Java 5不支持接口方法的覆盖注释,而Java 6则需要它。这可能本身表明您的JDK设置错误,如果您期望以Java 6为目标,那么您可能会获得Java 5。

答案 5 :(得分:-1)

如果您已将其评论出来,则不会覆盖这些方法。所以你实际上什么都不做。 (我的意见)