解决Android提示去掉@Override问题

在Android开发中,`@Override`注解对于标记重写父类方法至关重要,因为它确保了方法的正确覆盖。如果忽略此注解,可能会导致方法不被调用,进而影响应用程序的正常运行。当导入的项目提示去掉`@Override`,可能是因为编译器设置问题。解决方法是将编译器版本更改为1.6或更高,以支持对接口方法的实现。正确使用`@Override`有助于避免回调函数因拼写错误而未被调用的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看一下为什么要使用@Override

@Override不是Android的规范,是java 5新增的一个注解

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Override.html官方解释为

@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override

Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.

Since:
1.5

表示这个方法声明是为了重写超类中的一个方法声明。如果一个方法声明为@Override但是没有覆盖超类方法,编译器会产生一个错误消息。

如果没有@Override,编译器会把该方法当成你自己的子类中自己增加的方法,是可以编译通过的。

在Android中,对于所有的Android Application和Activity @Override是很重要的,比如在Activity中,有从onCreate到onDestory的生命周期,如果你使用onCreate时没有加上@Override注释,它将永远不会被调用,程序可以编译通过,但是应用程序不会正常工作。

有时候导入一个Android项目,会提示去掉@Override

因为JDK1.5的编译器默认对父类的方法进行覆盖,使用@Override进行说明,但是1.6已经扩展到对接口的方法。对于JDK5.0/1.5版本来说,@Override注解只能用于对超类的方法重写,不能用在对接口方法的实现上。如果还是以1.5来编译的话,会出现错误。

解决办法:把编译器改为1.6

在项目名上右键,选Properties,或者在Window菜单中找到Preferences,找到Java Compiler,修改相应值


小技巧:

可以在Source-> Override/Implement Methods下自动添加覆写和接口函数,可以确保函数名拼写正确。

注意:

Android里有一些系统自动调用的回调函数CallbackMethods,如果写的程序运行无错,但是就是没有该有的反应,那就可能是覆写回调函数时没有加@Override且函数名写错了。

参考:

http://stackoverflow.com/questions/8545540/why-override-needed-in-java-or-android

http://www.cnblogs.com/kaierwen/archive/2012/04/19/2456594.html

package com.example.kucun2.function; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.example.kucun2.entity.Bancai; import com.example.kucun2.entity.Caizhi; import com.example.kucun2.entity.Chanpin; import com.example.kucun2.entity.Dingdan; import com.example.kucun2.entity.Mupi; import com.example.kucun2.entity.Zujian; import java.util.List; public class Adapter { // 安全适配器基类,处理公共逻辑 private static abstract class SafeSpinnerAdapter<T> extends ArrayAdapter<T> { public SafeSpinnerAdapter(Context context, int resource, List<T> objects) { super(context, resource, objects); } @Override public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { View view = super.getDropDownView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); T item = getItem(position); textView.setText(formatDropdownText(item)); return view; } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { View view = super.getView(position, convertView, parent); TextView textView = view.findViewById(android.R.id.text1); T item = getItem(position); textView.setText(formatDisplayText(item)); return view; } // 需要子类实现的抽象方法 protected abstract String formatDisplayText(T item); protected abstract String formatDropdownText(T item); } // 1. 材质适配器 public static ArrayAdapter<Caizhi> setupCaizhiSpinner(Spinner spinner, List<Caizhi> data, Context context) { ArrayAdapter<Caizhi> adapter = new SafeSpinnerAdapter<Caizhi>(context, android.R.layout.simple_spinner_item, data) { @Override protected String formatDisplayText(Caizhi item) { return item != null ? item.getName() : "请选择材质"; } @Override protected String formatDropdownText(Caizhi item) { return item != null ? item.getName() : ""; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); return adapter; } // 2. 木皮适配器 public static void setupMupiSpinner(Spinner spinner, List<Mupi> data, Context context) { ArrayAdapter<Mupi> adapter = new SafeSpinnerAdapter<Mupi>(context, android.R.layout.simple_spinner_item, data) { @Override protected String formatDisplayText(Mupi item) { return item != null ? item.formatMupiDisplay() : "请选择木皮"; } @Override protected String formatDropdownText(Mupi item) { return item != null ? item.formatMupiDisplay() : ""; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } // 3. 板材适配器 public static void setupBancaiSpinners(Spinner spinner, List<Bancai> data, Context context) { ArrayAdapter<Bancai> adapter = new SafeSpinnerAdapter<Bancai>(context, android.R.layout.simple_spinner_item, data) { @Override protected String formatDisplayText(Bancai item) { return item != null ? item.TableText() : "请选择板材"; } @Override protected String formatDropdownText(Bancai item) { return item != null ? item.TableText() : ""; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } // 4. 订单适配器 public static void setupDingdanSpinner(Spinner spinner, List<Dingdan> data, Context context) { ArrayAdapter<Dingdan> adapter = new SafeSpinnerAdapter<Dingdan>(context, android.R.layout.simple_spinner_item, data) { @Override protected String formatDisplayText(Dingdan item) { return item != null ? item.getNumber() : "请选择"; } @Override protected String formatDropdownText(Dingdan item) { return item != null ? item.getNumber() : "请选择"; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } // 5. 产品适配器 public static void setupChanpinSpinner(Spinner spinner, List<Chanpin> data, Context context) { ArrayAdapter<Chanpin> adapter = new SafeSpinnerAdapter<Chanpin>(context, android.R.layout.simple_spinner_item, data) { @Override protected String formatDisplayText(Chanpin item) { return item != null ? item.getBianhao() : "请选择"; } @Override protected String formatDropdownText(Chanpin item) { return item != null ? item.getBianhao() : "请选择"; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } // 6. 组件适配器 public static void setupZujianSpinner(Spinner spinner, List<Zujian> data, Context context) { ArrayAdapter<Zujian> adapter = new SafeSpinnerAdapter<Zujian>(context, android.R.layout.simple_spinner_item, data) { @Override protected String formatDisplayText(Zujian item) { return item != null ? item.getName() : "请选择"; } @Override protected String formatDropdownText(Zujian item) { return item != null ? item.getName() : "请选择"; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } }un2 D Shutting down VM 2025-06-11 13:45:28.585 13717-13717 AndroidRuntime com.example.kucun2 E FATAL EXCEPTION: main Process: com.example.kucun2, PID: 13717 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:454) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:416) at com.example.kucun2.function.Adapter$SafeSpinnerAdapter.getView(Adapter.java:39) at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:206) at android.widget.Spinner.onMeasure(Spinner.java:622) at androidx.appcompat.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:444) at android.view.View.measure(View.java:29007) at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1226) at android.widget.LinearLayout.onMeasure(LinearLayout.java:728)
最新发布
06-12
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值