无意间都到一篇《走心的安卓工程师跳槽经验分享》,发现自己工作几年了,技术方面虽然有了飞跃的进步,可是不知道自己的技术到了什么地步,每个方面我都涉及到了,但都不深,这大概是初级工程师的诟病吧!
即使知道也不知道从何下手,非常感谢《走心的安卓工程师跳槽经验分享》的作者!
感兴趣的朋友和我一起走下去吧!
04注解
什么是注解以及运行时注解的使用。(上)
使用编译时注解简单实现类似 ButterKnife 的效果(下)
定义:
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。(引用)
作用分类:
①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检【Override】
Java 内置的注解:
1.@Override (空注解):
标记覆盖父类方法的方法。
/**
* 测试Override注解
* @author Administrator
*/
public class OverrideDemoTest {
//@Override
public String tostring() {
return "测试注解";
}
}
2 .@Deprecated( 空注解) :
标记代码中包含过时部分。
/**
* 测试Deprecated注解
* @author Administrator
*/
public class DeprecatedDemoTest {
public static void main(String[]args) {
// 使用DeprecatedClass里声明被过时的方法
DeprecatedClass.DeprecatedMethod();
}
}
class DeprecatedClass {
@Deprecated
public static void DeprecatedMethod() {
}
}
3.@SafeVarargs( 空注解) :
标记构造函数和方法,通知编译器,可变参数操作保证安全。
4.@FunctionInterface :
通知编译器,这个类型是 function 接口
5.@SuppressWarning:
通知编辑器,不用警告。
6.@SuppressWarning
支持的参数如下及使用方式见这篇 @SuppressWarning 使用及支持的参数。
7.@Documented:
注解在doc文档可见。
8.@Retention :
注解存储方式,目前只支持三种存储方法。
**8.1 RetentionPolicy.SOURCE:**
注解只保留在源码中,编译时会忽略。
**8.2 RetentionPolicy.CLASS:**
注解保留在源码中且编译时被编译器保留,但是运行时会被JVM忽略
**8.3 RetentionPolicy.RUNTIME:**
注解保留在源码中不且编译时被编译器保留,而且运行时也不会被JVM忽略,
9.@Target:
注解修饰什么对象。例如:
1.类、接口、枚举 :ElementType.TYPE
2.域或者属性 :ElementType.FIELD
3.方法 :ElementType.METHOD
4.参数: ElementType.PARAMTER
5.构造函数:ElementType.CONSTRUCTOR
6.本地变量:ElementType.LOCAL_VARIABLE
7.注解:ElementType. ANNOTATION_TYPE
8.包 :ElementType.PACKAGE
9.被继承的父类:@Inherited
想要熟稔注解,需要了解每个注解,不过我就写到这里,或许下次会编写关于每个不同注解的文章。
自定义注解
它类似于创建一个接口文件,但为了区分,我们需要将它声明为@interface。
例:
public @interface NewAnnotation {
}
使用自定义的注解类型。
public class AnnotationTest {
@NewAnnotation
public static void main(String[]args) {
}
}
为注解添加变量。
public @interface NewAnnotation {
String value();
}
定义一个枚举类型,然后将参数设置为该枚举类型,并赋予默认值
public @interface Greeting {
public enum FontColor {
BLUE,
RED,
GREEN
};
String name();
FontColor fontColor() default FontColor.RED;
}
为注解赋值。
public class AnnotationTest {
@NewAnnotation("mainmethod")
public static void main(String[]args) {
saying();
sayHelloWithDefaultFontColor();
sayHelloWithRedFontColor();
}
@NewAnnotation("saymethod")
public static void saying() {
}
// 选择使用该默认值
@Greeting(name="defaultfontcolor")
public static void sayHelloWithDefaultFontColor() {
}
//重新设置一个值来替换默认值
@Greeting(name="notdefault", fontColor=Greeting.FontColor.BLUE)
public static void sayHelloWithRedFontColor() {
}
}
本节完,下一节讲述《使用编译时注解简单实现类似 ButterKnife 的效果》
代码来源(java 注解 百度百科)