Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将lombok builder与抽象类一起使用_Java_Nullpointerexception_Lombok_Intellij Lombok Plugin - Fatal编程技术网

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的类,但它不是大多数人熟悉的类。它是数组中的一个私有静态类,函数如我前面所述。这是一个