Java注解

1. 注解原理

1.1. 功能

描述代码元数据的一种标准工具(JSR-175),使用XML的方式描述元数据和代码的关系过于松散, 注解的方式和代码耦合的比较紧密,易于标准化(注解定义、编译检查等。)

1.2 运行机制

在运行时通过反射机制获取并使用注解信息。

2. Java内置注解

1) @Override
修饰方法,重写父类或接口方法。

2) @Deprecated
修饰类、方法、字段、参数等,便是被修饰元素已过时。
Java 9中可带参数since和forRemoval

3)@SupressWarnings
抑制编译警告,必填参数:抑制的警告类型。

3. 创建自定义注解

3.1. 元注解

1)@Target
ElementType.METHOD
.TYPE
.FIELD
.PARAMETER
.CONSTRUCTOR
.LOCAL_VARIABLE
.PACKAGE

2)@Retntion
RetentionPolicy.RUNTIME
保存到.class中并被在运行时载入。可在运行时通过反射使用。
CLASS
只存在.class字节码中,运行时不加载,是默认保留策略(不指定策略)。
SOURCE
只存在源码中,编译时去掉,例如:Override。

3)@Inherited
子类可以集成父类的注解。

4)@Documented
生成doc时包含注解内容。

5)@Repeatable
一个注解是否可在单个元素上多次使用。

3.2. 创建步骤

3.2.1. Example

	@Target(ElementType.METHOD)
	@Retention(RetensionPolciy.RUNTIME)
	@Inherited
	@Documented
	public @interface Anno {
		public String name() default "Tom";
		int age() default 10;
	}
	
	public class SomeClass {
		@Anno(name="LiLei", age=15) // <<------
		public void SomeMethod() {
			// Do something
		}
	}
	
	publid static void getAnnotation(Class<?> cls) {
		for (Method m : cls.getDecleardMethods()) {
			Anno anno = m.getAnnotation(Anno.class );
	        if (anno != null){
	            System.out.println("Name: "+anno.name()+", age: "+anno.age());
	        }
		}
	}
	
	public static void main(String[] args) {
		getAnnotation(SomeClass.class);
	}
	

3.2.2. 说明

1)定义注解关键字:@interface

2)定义成员变量:
(1)限定类型:基本类型、String、class、enum、Annotation及上述类型数组。
(2)类型名后有括号:()。
(3)像接口的方法定义,不同:注解定义可指定默认值。
(4)成员变量不能为null。
(5)无成员变量的注解称为:标记注解。
(6)仅有一个名为value的成员,使用时可省略“value=”

3)无参数,不能抛异常。

4. 常用库中注解

4.1 Android

  1. @SuppressLint
  2. @TargetAPI
  3. @Nullable, @NonNull
  4. Resources
    @AnimRes, @ColorRes, @DrawableRes, @LayoutRes, @StringRes, @StyleRes and so on
  5. Thread
    @BinderThread, @MainThread, @UiThread, @WorkerThread, @AnyThread
  6. IntDef, StringDef
    元注解,定义新注解时使用。
    定义的注解可代替enum类型,节省内存。
    新定义注解RetentionPolicy.SOURCE

4.2 Retrofit

@GET
@POST
@PUT
@DELETE
@PATCH
@HEAD
@OPTIONS
@HTTP

4.3 JUnit

@BeforeClass
@AfterClass
@Before
@After
@Test
@Ignore

你可能感兴趣的:(java,开发语言,android,annotations)