J'ai presque écrit ce que je voulais dire dans le titre. Tout ce que je veux dire dans cet article, c'est:
C'est le comportement de Lombok 1.16.18.
import lombok.*;
@Data
public class Test {
private final int value1;
private final int value2;
public static void main(String[] args){
new Test(1, 1);
}
}
Dans ce cas, @Data regroupe @RequiredArgsConstructor, donc un constructeur est généré et compilé.
Cependant, cet ensemble @RequiredArgsConstructor ne générera un constructeur que s'il n'y a pas de déclaration de constructeur explicite. Il s'agit d'un comportement normal tel que décrit dans la documentation.
(except that no constructor will be generated if any explicitly written constructors already exist). Cité de @Data
Par exemple, le code suivant ne sera pas compilé.
import lombok.*;
@Data
public class Test {
private final int value1;
private final int value2;
public static void main(String[] args){
new Test(1, 1);
}
//Constructeur explicite
public Test() {
}
}
De même, si vous ajoutez une annotation qui crée un constructeur tel que @NoArgsConstructor, @Data ne générera pas le constructeur. Par conséquent, le code suivant ne sera pas compilé.
import lombok.*;
@NoArgsConstructor
@Data
public class Test {
private final int value1;
private final int value2;
public static void main(String[] args){
new Test(1, 1);
}
}
Avec à la fois @Data et @Value, @AllArgsConstructor semble gagner.
import lombok.*;
import java.util.Arrays;
@Data
@Value
public class Test {
int value1;
int value2;
public static void main(String[] args){
Arrays.stream(Test.class.getConstructors()).forEach(System.out::println);
new Test(1, 1); //Cela passe
new Test(); //Cela ne passe pas
}
}
J'ai également essayé le constructeur explicite + @ Data + @ Value, mais aucun d'entre eux n'a été généré.
import lombok.*;
import java.util.Arrays;
@Value
@Data
public class Test {
int value1;
int value2;
public static void main(String[] args){
Arrays.stream(Test.class.getConstructors()).forEach(System.out::println);
}
//Constructeur explicite
public Test(int i){
}
}