龙目岛的建设者与强制性参数 - java

如果我将@Builder添加到类中。创建了builder方法。

Person.builder().name("john").surname("Smith").build();

我有一个特定字段是强制性的要求。在这种情况下,名称字段是必填字段。理想情况下,我想这样声明。

Person.builder("john").surname("Smith").build();

谷歌搜索时,我发现许多替代方法,例如覆盖构建器实现,如下所示:

@Builder
public class Person {

    private String name;
    private String surname;

    public static PersonBuilder builder(String name) {
        return new PersonBuilder().name(name);
    }
}

然后像下面这样使用它:

Person p = Person.builder("Name").surname("Surname").build();

上面方法的问题是它仍然提供name()和PersonBuilder()方法,如下所示,我不希望这样做:

Person p = Person.builder("Name").surname("Surname").name("").build();
Person p = new Person.PersonBuilder().build;

另一种方法是在名称上添加@ lombok.nonnull检查,这将在创建对象时强制为名称提供值。但这是运行时检查。创建对象时不会强迫我提供名称的值。
lombok提供以下任何其他技术来实现:

 Person p = Person.builder("Name").surname("Surname").build();

注意:builder()和name()不应公开。创建Person对象的唯一方法应该在上方或下方:

 Person p = Person.builder("Name").build();

参考方案

你真的不能用lombok做到这一点,请参阅the explanation from the library authors。但是,自行构建此构建器是否复杂?

public static class PersonBuilder {

    private final String name;
    private String surname;

    PersonBuilder(String name) {
        this.name = name;
    }

    public PersonBuilder surname(String surname) {
        this.surname = surname;
        return this;
    }

    public Person build() {
        return new Person(name, surname);
    }
        
}

使用与您已经拥有的方法相同的方法:

    public static PersonBuilder builder(String name) {
        return new PersonBuilder(name);
    }

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java Scanner读取文件的奇怪行为 - java

因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…

Java Globbing模式以匹配目录和文件 - java

我正在使用递归函数遍历根目录下的文件。我只想提取*.txt文件,但不想排除目录。现在,我的代码如下所示:val stream = Files.newDirectoryStream(head, "*.txt") 但是这样做将不会匹配任何目录,并且返回的iterator()是False。我使用的是Mac,所以我不想包含的噪音文件是.DS_ST…

直接读取Zip文件中的文件-Java - java

我的情况是我有一个包含一些文件(txt,png,...)的zip文件,我想直接按它们的名称读取它,我已经测试了以下代码,但没有结果(NullPointerExcepion):InputStream in = Main.class.getResourceAsStream("/resouces/zipfile/test.txt"); Buff…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)