1.使用范围
- 类:只能作用在类上
2.介绍
为该类生成全参构造函数
3.属性
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package lombok;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface AllArgsConstructor {
String staticName() default "";
AllArgsConstructor.AnyAnnotation[] onConstructor() default {};
AccessLevel access() default AccessLevel.PUBLIC;
/** @deprecated */
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
public @interface AnyAnnotation {
}
}
- String staticName() default "";
使生成的构造方法是私有的,默认值 “”
并且生成一个参数为所有实例变量,返回类型为当前对象的静态方法,方法名为 staticName 值
- AllArgsConstructor.AnyAnnotation[] onConstructor() default {};
列出的所有注解都放在生成的构造函数上
JDK 7 之前的写法 onConstructor = @__({@AnnotationsGoHere}),JDK 8 之后的写法 onConstructor_ = {@AnnotationsGohere}
- AccessLevel access() default AccessLevel.PUBLIC;
设置构造函数的访问修饰符,如果设置了 staticName,那么将设置静态方法的访问修饰符
默认:PUBLIC,共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONE
其中 MODULE 是 Java 9 的新特性,NONE 表示不生成构造函数也不生成静态方法,即停用注解功能
注意:如果设置了staticName,那么生成的构造函数就为private修饰的
4.实例
@AllArgsConstructor(staticName = "newInstance", access = AccessLevel.PACKAGE, onConstructor_ = {@Deprecated})
public class TestAllArgsConstructor {
private int id;
private String name;
private String address;
private static String staticVar;
public static void main(String[] args) {
}
}
编译后:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.learn.lombok;
public class TestAllArgsConstructor {
private int id;
private String name;
private String address;
private static String staticVar;
public static void main(String[] args) {
}
/** @deprecated */
@Deprecated
private TestAllArgsConstructor(int id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
static TestAllArgsConstructor newInstance(int id, String name, String address) {
return new TestAllArgsConstructor(id, name, address);
}
}