@Getter @AllArgsConstructor
时间: 2024-10-22 07:09:30 浏览: 29
`@Getter` 和 `@AllArgsConstructor` 都是 Java 中的注解,它们通常用于简化访问器(getter methods)和构造函数的编写。
1. **@Getter**: 这个注解来自于 Lombok 框架,当它被添加到一个字段上时,Lombok 自动为该字段生成对应的 getter 方法。这意味着你无需手动编写如 `public String getName()` 的获取属性值的方法,只需要声明变量即可。
```java
private String name; // 使用 @Getter 后,等同于生成了 public String getName() 方法
```
2. **@AllArgsConstructor**: 也是一个 Lombok 注解,当你在一个类的所有字段上使用这个注解时,Lombok 就会自动生成一个包含所有字段默认值的无参构造器以及相应的 getters。这可以减少样板代码,提高效率。
```java
@AllArgsConstructor
class Person {
private String firstName;
private String lastName;
}
```
相关问题
java @Getter @Setter @NoArgsConstructor @AllArgsConstructor
这是 Java 中使用 Lombok 库的注解,用于自动生成 getter、setter、无参构造函数和全参构造函数。
- @Getter:自动生成类中所有属性的 getter 方法。
- @Setter:自动生成类中所有属性的 setter 方法。
- @NoArgsConstructor:自动生成无参构造函数。
- @AllArgsConstructor:自动生成全参构造函数。
使用这些注解可以简化代码编写,减少冗余的代码。例如:
```java
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Person {
private String name;
private int age;
}
```
上面的代码使用 Lombok 注解自动生成了 Person 类的 getter、setter、无参构造函数和全参构造函数,等价于手动编写如下代码:
```java
public class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
```
优化@Getter @AllArgsConstructor public enum FormLogicExpressionEnum { ALL(1, "全部"), ANY(2, "任意"); @EnumValue @JsonValue private Integer value; private String desc; /** * 枚举入参注解 * * @param value * @return */ @JsonCreator public static FormLogicExpressionEnum getByValue(Integer value) { for (FormLogicExpressionEnum typeEnum : values()) { if (typeEnum.getValue().equals(value)) { return typeEnum; } } return null; } }
同样地,这段代码已经很简洁了。如果要进一步优化,可以考虑使用 Java 8 的 Stream API 来简化 getByValue 方法的实现。使用 Stream API 可以将枚举值转换为一个流,然后使用 filter 方法过滤出 value 属性等于传入值的枚举值,最后使用 findFirst 方法获取第一个匹配的枚举值。优化后的代码如下:
```
@Getter
@AllArgsConstructor
public enum FormLogicExpressionEnum {
ALL(1, "全部"),
ANY(2, "任意");
@EnumValue
@JsonValue
private Integer value;
private String desc;
/**
* 枚举入参注解
*
* @param value
* @return
*/
@JsonCreator
public static FormLogicExpressionEnum getByValue(Integer value) {
return Arrays.stream(FormLogicExpressionEnum.values())
.filter(typeEnum -> typeEnum.getValue().equals(value))
.findFirst()
.orElse(null);
}
}
```
这样,getByValue 方法就变得更加简洁了,而且代码逻辑也更加清晰易懂。
阅读全文