package cn.wcj.jdk8.lambda.test;

import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;

import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Repeatable(MyAnnos.class)
@Target({TYPE, FIELD, METHOD,CONSTRUCTOR, LOCAL_VARIABLE,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {

    String value()    ;

}
package cn.wcj.jdk8.lambda.test;

import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnos {

    MyAnno[] value()   ;

}
package cn.wcj.jdk8.lambda.test;

import java.lang.reflect.Method;
import java.util.Arrays;

import org.junit.Test;
/**
 * 
* <p>Title:AnnoTest </p>
* <p>Description:JDK8-重复注解与类型注解 </p>
* <p>Company:Software College </p> 
* @author SuccessKey(WangCJ)
* @date 2017年6月21日 下午2:49:19
 */
public class AnnoTest {

    //使用类型注解可以解决检查约束的工作
    private /*@NonNull*/ Object obj ;


    @Test
    public void test1() throws Exception{

        Class<AnnoTest> clazz=AnnoTest.class ;
        Method method = clazz.getMethod("doXXX");
        MyAnno[] myAnnos = method.getAnnotationsByType(MyAnno.class);
        Arrays.stream(myAnnos)
               .map(MyAnno::value)
               .forEach(System.out::println);


    }

    @MyAnno("Washing")
    @MyAnno("GoToBed")
    public void doXXX() {

    }

}