JAVA 注解之自定义注解
1、注解:
Annotation不是注解,它是一种标记,JDK1.5的新特性,例如:静态导入,枚举,增强for循环,装箱,泛型
1)最早的注解是内置注解:
@Override 重写
@Deprecated作废
@SuppressWarnings消除警告
2)元注解(定义注解的作用,修饰注解的注解)
@Target//位置
@Retention//声明周期,保留阶段
@Documented//文档化
@Inherited//可继承
3)函数式接口注解:
@FunctionalInterface//为了写出lambda表达式
2、如何注解:
1)public @interface Test{
}
结构是一个特殊的接口
package 注解学习;
2)
@Value
public class Test {
public static void main(@Value String[] args) {
// TODO Auto-generated method stub
}
}
/* 自定义一个注解 */
@interface Value{
}
3)如何限制注解只能用在某个特定的位置?
用元注解Target修饰
Target用在注解的头顶上限制位置,它是一个元注解:
4、函数式接口叫做匿名函数:
JAVA中的匿名内部类就是其他语言的匿名函数
package 注解学习;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Vaule
public class Test {
@Vaule(value=10,message=“张三”,msg= {“ni”})
public static void main( String[] args) {
// TODO Auto-generated method stub
Fly fly=new Fly() {
@Override
public void flying() {
// TODO Auto-generated method stub
System.out.println("fkjigj3rq");
}
};
//Fly 是一个函数式接口,可以用JAVA8的Lambda改写
Fly f1=()->{
System.out.println("grerofwjepoeogfkjigj3rq");
};
f1.flying();
}
}
//也有注解@Vaule
class Son extends Test{
@Lanqiao(“涛哥”)
String name;
@Lanqiao(“塔里木”)
public void print() {
}
}
//自定义一个注解
@Inherited//继承性
@Documented//使用JAVAdoc命令把这个类做成文档的时候,就会对被修饰的注解起标记作用
@Retention(RetentionPolicy.RUNTIME)//生命周期
@Target({ElementType.METHOD,ElementType.TYPE})
@interface Vaule{
//如果注解中只有一个参数且是value 那么这个参数是可以省略掉的
double value() default 0;
String message() default"";
String[] msg() default{“wo”};
}
//自定义一个蓝桥注解
@Retention(RetentionPolicy.RUNTIME)//生命周期
@Target({ElementType.METHOD,ElementType.FIELD})
@interface Lanqiao{
String value();
}
//函数式接口(里面只能有一个抽象方法)
/*
- @FunctionalInterface作用表示这是个函数式接口,
- 告诉编译器,但是这个注解可以不写,只要这个接口符合函数式编程的特点
*/
@FunctionalInterface
interface Fly{
public void flying();
}
上一篇: php代码的编译与执行
下一篇: Flink