让我的代码编译 - 包含以下内容:
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 :(得分: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)
如果您已将其评论出来,则不会覆盖这些方法。所以你实际上什么都不做。 (我的意见)