首先什么是注解,它的作用是什么,本文讲解了Android注解的最基本内容与实例解读
首先什么是注解?@Override
就是注解,它的作用是:
1、检查是否正确的重写了父类中的方法。
2、标明代码,这是一个重写的方法。
1、体现在于:检查子类重写的方法名与参数类型是否正确;检查方法private/final/static等不能被重写。实际上@Override
对于应用程序并没有实际影响,从它的源码中可以出来。
2、主要是表现出代码的可读性。
作为Android开发中熟知的注解,Override只是注解的一种体现,更多时候,注解还有以下作用:
降低项目的耦合度。
自动完成一些规律性的代码。
自动生成java代码,减轻开发者的工作量。
一、注解基础快读
1、元注解
元注解是由java提供的基础注解,负责注解其它注解,如上图Override被@Target
和@Retention
修饰,它们用来说明解释其它注解,位于sdk/sources/android-25/java/lang/annotation
路径下。
元注解有:
@Retention:注解保留的生命周期
@Target:注解对象的作用范围。
@Inherited:@Inherited标明所修饰的注解,在所作用的类上,是否可以被继承。
@Documented:如其名,javadoc的工具文档化,一般不关心。
@Retention
Retention说标明了注解被生命周期,对应RetentionPolicy的枚举,表示注解在何时生效:
SOURCE:只在源码中有效,编译时抛弃,如上面的
@Override
。CLASS:编译class文件时生效。
RUNTIME:运行时才生效。
如下图,com.android.support:support-annotations
中的Nullable注解,会在编译期判断,被注解的参数是否会空,具体后续分析。
@Target
Target标明了注解的适用范围,对应ElementType枚举,明确了注解的有效范围。
TYPE:类、接口、枚举、注解类型。
FIELD:类成员(构造方法、方法、成员变量)。
METHOD:方法。
PARAMETER:参数。
CONSTRUCTOR:构造器。
LOCAL_VARIABLE:局部变量。
ANNOTATION_TYPE:注解。
PACKAGE:包声明。
TYPE_PARAMETER:类型参数。
TYPE_USE:类型使用声明。
如上图所示,@Nullable
可用于注解方法,参数,类成员,注解,包声明中,常用例子如下所示:
/**
* Nullable表明
* bind方法的参数target和返回值Data可以为null
*/
@Nullable
public static Data bind(@Nullable Context target) { //do someThing and return
return bindXXX(target);
}
@Inherited
注解所作用的类,在继承时默认无法继承父类的注解。除非注解声明了 @Inherited。同时Inherited声明出来的注,只对类有效,对方法/属性无效。
如下方代码,注解类@AInherited
声明了Inherited ,而注解BNotInherited 没有,所在在它们的修饰下:
类Child继承了父类Parent的
@AInherited
,不继承@BNotInherited
;重写的方法
testOverride()
不继承Parent的任何注解;
testNotOverride()
因为没有被重写,所以注解依然生效。
@Retention(RetentionPolicy.RUNTIME)
@Inherited public @interface AInherited {
String value();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface BNotInherited {
String value();
}
@AInherited("Inherited")
@BNotInherited("没Inherited")
public class Parent {
@AInherited("Inherited")
@BNotInherited("没Inherited")
public void testOverride(){
}
@AInherited("Inherited")
@BNotInherited("没Inherited")
public void testNotOverride(){
}
}
/**
* Child继承了Parent的AInherited注解
* BNotInherited因为没有@Inherited声明,不能被继承
*/public class Child extends Parent {
/**
* 重写的testOverride不继承任何注解
* 因为Inherited不作用在方法上
*/
@Override
public void testOverride() {
}
/**
* testNotOverride没有被重写
* 所以注解AInherited和BNotInherited依然生效。
*
本文标题为:Android注解基础介绍快速入门与解读


- 详解flutter engine 那些没被释放的东西 2022-12-04
- iOS 对当前webView进行截屏的方法 2023-03-01
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- Android studio实现动态背景页面 2023-05-23
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- Flutter实现底部和顶部导航栏 2022-08-31
- Android实现轮询的三种方式 2023-02-17
- Android实现监听音量的变化 2023-03-30
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14