使用带有抽象的 lombok 构建器 class
using lombok builder with an abstract class
我有这个摘要class:
public abstract class Hotel {
protected List<String> defaultValues() {
return List.of("Geeks", "For", "Geeks");
}
}
以及从抽象 class 延伸而来的龙目岛 class:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Hostel extends Hotel {
private List<String> values = defaultValues();
@SuppressWarnings("unused")
public static class HosteBuilder {
public Hostel build() {
this.values.add("ww");
...
}
}
}
但是我在行 values.add("ww");
中得到一个空指针
Builder class 需要先创建一个新实例。而且,您使用的列表是不可变的。用户 Michael 已注意到这两个问题。在任何情况下,lombok 都不应该为此受到指责,因为它只添加方法,none 您在示例中使用的方法。
首先,将列表更改为可变列表类型:
return Arrays.asList(new String[]{"Geeks", "For", "Geeks"});
扩展类型为:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Hostel extends Hotel {
private List<String> values = defaultValues();
@SuppressWarnings("unused")
public static class HosteBuilder {
public Hostel build() {
Hostel hostel = new Hostel();
hostel.values.add("ww");
// ...
return hostel;
}
}
}
我有这个摘要class:
public abstract class Hotel {
protected List<String> defaultValues() {
return List.of("Geeks", "For", "Geeks");
}
}
以及从抽象 class 延伸而来的龙目岛 class:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Hostel extends Hotel {
private List<String> values = defaultValues();
@SuppressWarnings("unused")
public static class HosteBuilder {
public Hostel build() {
this.values.add("ww");
...
}
}
}
但是我在行 values.add("ww");
Builder class 需要先创建一个新实例。而且,您使用的列表是不可变的。用户 Michael 已注意到这两个问题。在任何情况下,lombok 都不应该为此受到指责,因为它只添加方法,none 您在示例中使用的方法。
首先,将列表更改为可变列表类型:
return Arrays.asList(new String[]{"Geeks", "For", "Geeks"});
扩展类型为:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Hostel extends Hotel {
private List<String> values = defaultValues();
@SuppressWarnings("unused")
public static class HosteBuilder {
public Hostel build() {
Hostel hostel = new Hostel();
hostel.values.add("ww");
// ...
return hostel;
}
}
}