@NoArgsConstructor
和 @AllArgsConstructor
是 Lombok 库中的两个常用注解,它们用于自动生成无参构造函数和全参构造函数。
Lombok 使用 Java 的注解处理器来生成代码。当你在类上使用 @NoArgsConstructor
或 @AllArgsConstructor
注解时,Lombok 会在编译时期自动生成相应的构造函数代码。这样,你就不需要手动编写这些构造函数,可以节省大量的时间和代码。
@NoArgsConstructor 注解
@NoArgsConstructor
是 Lombok 库中的一个注解,用于自动生成一个无参构造函数。
源码如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface NoArgsConstructor {
String staticName() default "";
AnyAnnotation[] onConstructor() default {};
AccessLevel access() default lombok.AccessLevel.PUBLIC;
boolean force() default false;
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
}
作用
它的主要作用是简化 Java 类的编写,减少手动编写无参构造函数的工作量,特别是对于那些具有大量字段的类。
注解属性
@NoArgsConstructor
虽然它本身没有太多属性,但有一些属性可以用来定制生成的无参构造函数的行为。
下面是 @NoArgsConstructor
注解的属性:
staticName
:默认为""
,表示不生成静态工厂方法。如果设置为非空字符串,Lombok 将生成一个静态工厂方法,方法名称与指定的字符串相同,用于创建类的实例。onConstructor
:默认为空字符串。允许你为生成的构造函数添加注释。这个属性可以用来提供有关构造函数用途的额外信息。access
:指定生成的无参构造函数的访问修饰符。默认值是public
。你可以使用AccessLevel
枚举来设置访问级别,例如AccessLevel.PRIVATE
、AccessLevel.PROTECTED
等。force
:默认为false
。如果设置为true
,则 Lombok 会尝试生成无参构造函数,即使类已经有了其他构造函数(有参构造函数)。这在某些情况下可能会有用。
这些属性可以根据你的需求来配置 @NoArgsConstructor
注解,以便生成符合你要求的无参构造函数。需要注意的是,通常情况下,你不需要显式地设置这些属性,因为 @NoArgsConstructor
的默认值通常就足够了。但是,在一些特殊情况下,这些属性可以提供额外的定制和控制。
用法
只需在类的定义上使用 @NoArgsConstructor
注解即可,如下所示:
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class MyClass {
// 类的字段和方法
}
@AllArgsConstructor 注解
@AllArgsConstructor
是 Lombok 库中的一个注解,用于自动生成一个包含所有字段的全参构造函数。
源码如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface AllArgsConstructor {
String staticName() default "";
AnyAnnotation[] onConstructor() default {};
AccessLevel access() default lombok.AccessLevel.PUBLIC;
@Deprecated
@Retention(RetentionPolicy.SOURCE)
@Target({})
@interface AnyAnnotation {}
}
作用
它的主要作用是简化 Java 类的编写,减少手动编写全参构造函数的工作量,特别是对于那些具有大量字段的类。
注解属性
@AllArgsConstructor
虽然它本身没有太多属性,但有一些属性可以用来定制生成的无参构造函数的行为。
下面是 @AllArgsConstructor
注解的属性:
staticName
:默认为""
,表示不生成静态工厂方法。如果设置为非空字符串,Lombok 将生成一个静态工厂方法,方法名称与指定的字符串相同,用于创建类的实例。onConstructor
:默认为空字符串。允许你为生成的构造函数添加注释。这个属性可以用来提供有关构造函数用途的额外信息。access
:指定生成的无参构造函数的访问修饰符。默认值是public
。你可以使用AccessLevel
枚举来设置访问级别,例如AccessLevel.PRIVATE
、AccessLevel.PROTECTED
等。
这些属性可以根据你的需求来配置 @AllArgsConstructor
注解,以便生成符合你要求的全参构造函数。通常情况下,你可以使用注解的默认值,但在某些情况下,特别是需要额外的控制或自定义构造函数时,这些属性可以提供非常有用的选项。
用法
只需在类的定义上使用 @AllArgsConstructor
注解即可,如下所示:
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class MyClass {
private String field1;
private int field2;
// 其他字段和方法
}
你还可以使用 access
属性来指定构造函数的访问修饰符,例如:
import lombok.AllArgsConstructor;
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MyClass {
private String field1;
private int field2;
// 其他字段和方法
}
总结
总之,@NoArgsConstructor
和 @AllArgsConstructor
注解是 Lombok 库中用于自动生成无参构造函数和全参构造函数的两个常用注解。它们的使用可以大大简化 Java 类的编写,减少冗长的构造函数代码,提高代码的可读性和可维护性。在使用时,只需在类的定义上添加相应的注解,Lombok 会自动为你生成构造函数代码。