Java-注解(不包含元注解)

@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(); }

 

posted @ 2019-05-15 21:43  狱婪  阅读(530)  评论(0)    收藏  举报