构造方法与代替代码构造方法的注解
一、有参构造和无参构造
构造方法注意事项:
1、构造方法没有返回值,连void关键字都没有
2、构造方法的名字需要与类名保持一致、
3、构造法规范没有具体
4、构造方法可以重载
5、一个类中没有给出任何构造,那么会存在一个默认的空参构造
6、一个类中如果手动给出了构造方法,那么将不会在提供空参构造
二、自动生成常用方法(如getter、setter、构造方法)
@Data
、@NoArgsConstructor
、@AllArgsConstructor
都是 Lombok 框架提供的注解,用于简化 Java 类的代码编写,自动生成常用方法(如 getter、setter、构造方法等),减少模板代码。
1. @Data
(最常用)
作用:自动生成类的以下内容:
- 所有字段的
getter
方法(用于获取字段值)。 - 所有非
final
字段的setter
方法(用于设置字段值)。 toString()
方法(返回对象的字符串表示,包含所有字段)。equals()
和hashCode()
方法(用于对象比较和哈希计算)。- 一个包含所有参数的构造方法(仅当没有显式定义构造方法时)。
import lombok.Data;@Data
public class User {private Long id;private String name;private Integer age;
}
等价于手动编写
public class User {private Long id;private String name;private Integer age;// getter 方法public Long getId() { return id; }public String getName() { return name; }public Integer getAge() { return age; }// setter 方法public void setId(Long id) { this.id = id; }public void setName(String name) { this.name = name; }public void setAge(Integer age) { this.age = age; }// toString()public String toString() { ... }// equals() 和 hashCode()public boolean equals(Object o) { ... }public int hashCode() { ... }
}
2. @NoArgsConstructor
作用:自动生成无参构造方法(即没有参数的构造方法)。
场景:很多框架(如 Spring、MyBatis、Jackson)在实例化对象时需要无参构造方法(例如通过反射创建对象),如果类中定义了有参构造方法,Java 不会自动生成无参构造,此时需要用该注解手动生成。
import lombok.NoArgsConstructor;@NoArgsConstructor
public class User {private Long id;private String name;
}
等价于:
public class User {private Long id;private String name;// 无参构造public User() {}
}
3. @AllArgsConstructor
作用:自动生成全参构造方法(包含所有字段作为参数的构造方法)。
import lombok.AllArgsConstructor;@AllArgsConstructor
public class User {private Long id;private String name;private Integer age;
}
等价于:
public class User {private Long id;private String name;private Integer age;// 全参构造public User(Long id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}
}
常用组合:@Data + @NoArgsConstructor + @AllArgsConstructor
这三个注解经常一起使用,完整生成一个 Java Bean 所需的核心方法:
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private Long id;private String name;private Integer age;
}
此时该类会自动拥有:
- 所有字段的 getter、setter。
toString()
、equals()
、hashCode()
。- 无参构造方法。
- 包含
id
、name
、age
三个参数的全参构造方法。