@SuppressWarnings:抑制警告
package java.lang; import java.lang.annotation.*; import static java.lang.annotation.ElementType.*;
/**
* since 1.5
*/ @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings { String[] value(); }
示例1:抑制单类型的警告
@SuppressWarnings("unchecked") public void addItems(String item){ @SuppressWarnings("rawtypes") List items = new ArrayList(); items.add(item); }
示例2:抑制多类型的警告
@SuppressWarnings(value={"unchecked", "rawtypes"}) public void addItems(String item){ List items = new ArrayList(); items.add(item); }
示例3:抑制所有类型的警告
@SuppressWarnings("all") public void addItems(String item){ List items = new ArrayList(); items.add(item); }
@Override:表明被注解的目标是重写父类方法
package java.lang; import java.lang.annotation.*; /** * @since 1.5 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }
@Deprecated:标明被注解的目标已过时
package java.lang; import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; /** * @since 1.5 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}) public @interface Deprecated { }
@SafeVarargs:抑制编译警告
package java.lang; import java.lang.annotation.*; /** * @since 1.7 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) public @interface SafeVarargs {}
@SafeVarargs注解只能用在参数长度可变的方法或构造方法上,且方法必须声明为static或final,否则会出现编译错误。
示例:
package com.annotation; public class SafeVarargsTest { @SafeVarargs public static void staticMethod(String... args) { System.out.println("这是一个参数长度可变的static方法"); } @SafeVarargs public final void finalMethod(String... args) { System.out.println("这是一个参数长度可变的final方法"); } @SafeVarargs public static final void staticFinalMethod(String... args) { System.out.println("这是一个参数长度可变的static final方法"); } }
@Native:声明一个可以被本地代码引用的常量值字段
package java.lang.annotation; /** * @since 1.8 */ @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.SOURCE) public @interface Native { }
@FunctionalInterface:声明函数式接口
package java.lang; import java.lang.annotation.*; /** * @since 1.8 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface FunctionalInterface {}
被@FunctionalInterface注解的接口,包含以下特性:
- 只能包含一个抽象方法
- 可以定义默认的方法实现
- 可以定义静态的方法实现
- 可以定义java.lang.Object中的public方法,不可以是public final方法
示例:
package com.annotation; @FunctionalInterface public interface MyFunctionalInterface { /** * 必须有抽象方法,有且仅有一个 */ Object onlyAbstractMethod(Object params); default void defaultMethod() { System.out.println("这是函数式接口中一个默认方法"); } static void staticMethod() { System.out.println("这是函数式接口中一个静态方法"); }
// 函数式接口里是可以包含Object里的public方法,这些方法对于函数式接口来说,不被当成是抽象方法(虽然它们是抽象方法);因为任何一个函数式接口的实现,默认都继承了Object类,包含了来自java.lang.Object里对这些抽象方法的实现;
// final方法无法被复写,所以此处无法添加Object中的public final方法 @Override String toString(); @Override boolean equals(Object obj); @Override int hashCode(); }