使用Java 8初始化新对象并设置值

使用Java 8初始化新对象并设置值,java,java-8,java-16,Java,Java 8,Java 16,现在,我通过以下方式将传递给,首先创建对象,调用方法来设置值,然后将其传递给另一个对象方法 To to = new To(); to.setEmail("emailaddress@gmail.com"); to.setName("John Smith"); Headers headers = new Headers(); headers.setTo(Arrays.asList(to)); 调用headers.setTo时,是否可以执行上面与to对象相关的所有操作 Headers header

现在,我通过以下方式将
传递给
,首先创建对象,调用方法来设置值,然后将其传递给另一个对象方法

To to = new To();
to.setEmail("emailaddress@gmail.com");
to.setName("John Smith");

Headers headers = new Headers();
headers.setTo(Arrays.asList(to));
调用
headers.setTo
时,是否可以执行上面与
to
对象相关的所有操作

Headers headers = new Headers();
headers.setTo(Is it possible to Initialize and set the "To" values in here?);

而不是POJO方法。您可以在中创建一个构造函数,将所需的所有字段作为参数,也可以使用生成器模式。

只有在类中有一个构造函数采用上述参数时才有可能:

public class To {

    private String Email;
    private String Name;

    // The constructor
    public To(String Email, String Name) {
        this.Email = Email;
        this.Name = Name;
    }

    // ... more code ...
}
那么你的电话可能会是这样的:

Headers headers = new Headers();
headers.setTo(Arrays.asList(new To("emailaddress@gmail.com","John Smith")));
我想你没有用。如果您有自己的自定义
标题
类和
类,您可以尝试以下修改

class Headers{
    //....Other variables, getters & setters
    List<? extends To> to = new ArrayList<>();

    public void setTo(Supplier<List> toSupplier){
        toSupplier.get().foreach(to::add);
    }
}


除非您可以将带有
输入参数的构造函数添加到
类中,否则唯一的选项(也是一个好选项)是factory/builder模式

定义如下:

public class ToBuilder {
    public static To createTo(String email, String name) {
        To to = new To();
        to.setEmail(email);
        to.setName(name);
        return to;
    }
}
然后你可以做:

Headers headers = new Headers();
headers.setTo(ToBuilder.createTo("emailaddress@gmail.com","John Smith"));
因为,您可以使用
To
作为
记录
,这将使其在默认情况下也是不可变的

公共记录收件人(字符串电子邮件、字符串名称){
}
Headers=newheaders();
headers.setTo(新到(“emailaddress@gmail.com“,”约翰·史密斯“);

Make
To
不可变(可选,但推荐),并提供一个同时接受电子邮件和名称的构造函数。如果要链接方法,请让它们返回调用的对象。我不太熟悉Lambda表达式。但是这是我可以用Lambda表达式做的吗?@Arya不,Lambda在这里没有帮助。作为补充说明,创建单个元素列表的首选方法是
Collections.singletonList(obj)
而不是
Arrays.asList(obj)
“不使用POJO方法”你是说你的解决方案不会创建对象吗?好的,所以术语“POJO”在这里可能有点混淆。我的错。我们使用术语“POJO”已经有好几年了,用于表示具有某些属性、默认构造函数、getter和setter的Java bean。您的供应商如何使事情变得更简单?除了您使用原始类型、拼写错误的方法名称和不鼓励使用的编码样式之外(使用
forEach
而不是收集添加到列表中)还有一个误导性的方法名称,因为
setTo
实际上是一个低效的
addAll
,我不得不问@zeroplagl,通过
Supplier
提供列表有什么问题,以及额外的复制操作应该解决什么问题?我基本上是试图使用lambda表达式编写它。(很抱歉输入错误,我没有使用任何IDE,我只是在文本编辑器中输入了整个内容)
public class ToBuilder {
    public static To createTo(String email, String name) {
        To to = new To();
        to.setEmail(email);
        to.setName(name);
        return to;
    }
}
Headers headers = new Headers();
headers.setTo(ToBuilder.createTo("emailaddress@gmail.com","John Smith"));