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

时间:2016-09-01 23:44:58

标签: java java-8

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

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

Headers headers = new Headers();
headers.setTo(Arrays.asList(to));

在调用to时,是否可以执行上述与headers.setTo对象相关的操作?

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

6 个答案:

答案 0 :(得分:2)

不是POJO方法。您可以在“将所有字段作为参数创建”中创建构造函数,也可以使用构建器模式。

答案 1 :(得分:0)

只有当类To中有一个构造函数时,才可能采用这样的参数:

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")));

答案 2 :(得分:0)

我认为你没有使用com.sun.net.httpserver.Headers。如果您拥有自己的自定义Headers课程和To课程,则可以尝试以下修改。

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

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

//向To类添加一个新的构造函数,该类接受 name&amp;电子邮件。然后你可以按如下方式重写它:

Headers headers = new Headers();
Supplier<List> toSupplier = () -> Arrays.asList(new To("John Smith","emailaddress@gmail.com"));
headers.setTo(toSupplier);

OR

Headers headers = new Headers();
headers.setTo(() -> Arrays.asList(new To("John Smith","emailaddress@gmail.com")));

答案 3 :(得分:0)

除非您可以为To类添加带有输入参数的构造函数,否则唯一的选项(以及一个好选项)是工厂/构建器模式。

定义:

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"));

答案 4 :(得分:0)

开始,您可以将 To 用作 record,这也将使其默认不可变

public record To(String email, String name) {

}

Headers headers = new Headers();
headers.setTo(new To("emailaddress@gmail.com", "John Smith"));

答案 5 :(得分:0)

据我所知,您正在寻找 Lambda 来创建对象列表。 由于 Arrays.asList 允许 Object (public static List asList(T... a)),我们不能将函数传递给它。

我可以通过编写新方法并将供应商传递给该方法来找到一种解决方法。这样您就可以在使用该方法的同时编写自己的供应商。

即:

List<To> tos = createList(()->{
  To to = new To();
  to.setEmail("emailaddress@gmail.com");
  to.setName("John Smith");
  return to;
},()->{
  To to = new To();
  to.setEmail("emailaddress@gmail.com");
  to.setName("John Smith");
  return to;
});


private <T> List<T> createList(Supplier<T>... suppliers)
{
    return Arrays.stream(suppliers).map(supplier -> {
        return supplier.get();
    }).collect(Collectors.toList());
}