Java 将lombok builder与抽象类一起使用
我有一个抽象类:Java 将lombok builder与抽象类一起使用,java,nullpointerexception,lombok,intellij-lombok-plugin,Java,Nullpointerexception,Lombok,Intellij Lombok Plugin,我有一个抽象类: public abstract class Hotel { protected List<String> defaultValues() { return List.of("Geeks", "For", "Geeks"); } } @Data @Builder @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode public class Hostel extends
public abstract class Hotel {
protected List<String> defaultValues() {
return List.of("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() {
this.values.add("ww");
...
}
}
}
这个lombok类是从抽象类扩展而来的:
public abstract class Hotel {
protected List<String> defaultValues() {
return List.of("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() {
this.values.add("ww");
...
}
}
}
但是我在values.addww行中得到一个空指针 生成器类需要首先创建一个新实例。但是,您使用的列表也是不可变的。用户Michael已经注意到了这两个问题。在任何情况下,lombok都不应为此负责,因为它只添加了方法,而您在示例中没有使用任何方法 首先,将列表更改为可变列表类型: 返回Arrays.asListnew字符串[]{Geeks,For,Geeks}; 扩展类型为: @资料 @建筑商 @诺尔格构装师 @AllArgsConstructor @EqualsAndHashCode 公共级旅馆延伸酒店{ 私有列表值=默认值; @抑制未使用的警告 公共静态类生成器{ 公共宿舍大楼{ 宿舍=新宿舍; hotel.values.addww; // ... 返回旅馆; } } }
这甚至不应该编译。defaultValues返回一个不可变列表。为什么你认为你可以增加它?不可变意味着某些东西无法更改。添加是一种更改。HosteBuilder无法使用Hostel的字段值,因为它是一个静态内部类。它没有对封闭类的引用,我不想听起来粗鲁,但lombok不是Java初学者工具。在开始使用lombok之前,您应该真正熟悉所有Java编程语言结构,尤其是在使用更复杂的lombok功能(如@Builder)时。此外,当您必须抑制警告时,在大多数情况下,这是有问题的迹象。在这里,您的生成器类名中有一个输入错误。实际上,Arrays.asList不是一个好的选择。它是给定数组的视图。它是可变的,因为元素可以重新排序或替换,但您不能添加元素,因为支持数组的大小是固定的。实际上,Arrays.asList在Java 8中返回一个ArrayList,这是一种标准的低内存列表类型,可以轻松地将元素添加到其中。支持列表的数组将根据需要复制到更大的数组中。如果您要更正我的错误,请仔细检查您是否确实正确。它返回一个名为ArrayList的类,但它不是大多数人熟悉的类。它是数组中的一个私有静态类,函数如我前面所述。这是一个