둬볡 λ²μ : 1.16.18
μ λ€λ¦μμ Lombok λΉλλ₯Ό μ¬μ©νλ©΄ μλͺ»λ μ νκ³Ό κ΄λ ¨λ μ»΄νμΌ μ€λ₯κ° λ°μν©λλ€.
public class Main {
public static abstract class Animal {
}
public static class Dog extends Animal {
}
<strong i="7">@Getter</strong>
<strong i="8">@Setter</strong>
public static class SimpleBuilder<ANIMAL extends Animal> {
private ANIMAL animal;
}
<strong i="9">@Getter</strong>
@lombok.Builder
public static class LombokBuilder<ANIMAL extends Animal> {
private ANIMAL animal;
}
public static void main(String[] args) {
//COMPILES OK:
final SimpleBuilder<Dog> simpleBuilder = new SimpleBuilder<>();
simpleBuilder.setAnimal(new Dog());
//COMPILATION ERROR:
final LombokBuilder<Dog> lombokBuilder = LombokBuilder.builder().animal(new Dog()).build();
}
}
LombokBuilderμμ λ€μ μ€λ₯κ° λ°μν©λλ€.
Required: LombokBuilder <Dog>
Found: LombokBuilder <Animal>
#1420κ³Ό κ΄λ ¨μ΄ μμ μ μμ΅λλ€.
λ¬Έμ λ νμ μ μΆμ κ΄λ ¨μ΄ μμ΅λλ€. κ·Έκ²μ λΉμ μ΄ μκ°νλ κ²λ§νΌ λ©λ¦¬ κ°μ§ μμ΅λλ€. LombokBuilder.builder() νΈμΆμ 무μμ μ λ ₯ν μ§μ λν λ¨μκ° μμ΅λλ€. λ°λΌμ μ»΄νμΌλ¬κ° μ»΄νμΌλλλ‘ μ½κ° λμμΌ ν©λλ€.
java
final LombokBuilder<Dog> lombokBuilder = LombokBuilder.<Dog>builder().animal(new Dog()).build();
λλ μ΄κ²μ΄ 둬볡 λ¬Έμ λΌκ³ μκ°νμ§ μμ΅λλ€.
@Builder
λ₯Ό μ¬μ©νμ¬ ν΄λμ€μ μ½κ° λ 건쑰ν ꡬ문μ μΆκ°ν μ μμ΅λλ€.
public static <T extends Animal> Owner.OwnerBuilder<T> builder(Class<T> cls) { return new Owner.OwnerBuilder<>(); }
_(λͺ
νμ±μ μν΄ μμ ν΄λμ€ μ΄λ¦ LombokBuilder
μ Owner
νμ΅λλ€)_
μ΄μ λ€μκ³Ό κ°μ΄ λΉλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
// Owner<Dog> owner = Owner.<Dog>builder().animal(new Dog()).build();
Owner<Dog> owner = Owner.builder(Dog.class).animal(new Dog()).build();
μ°μ κ±°μ λκ°λ€μ :/
κ°μ₯ μ μ©ν λκΈ
λ¬Έμ λ νμ μ μΆμ κ΄λ ¨μ΄ μμ΅λλ€. κ·Έκ²μ λΉμ μ΄ μκ°νλ κ²λ§νΌ λ©λ¦¬ κ°μ§ μμ΅λλ€. LombokBuilder.builder() νΈμΆμ 무μμ μ λ ₯ν μ§μ λν λ¨μκ° μμ΅λλ€. λ°λΌμ μ»΄νμΌλ¬κ° μ»΄νμΌλλλ‘ μ½κ° λμμΌ ν©λλ€.
java final LombokBuilder<Dog> lombokBuilder = LombokBuilder.<Dog>builder().animal(new Dog()).build();
λλ μ΄κ²μ΄ 둬볡 λ¬Έμ λΌκ³ μκ°νμ§ μμ΅λλ€.