2016-09-01 41 views
1

现在,我通过以下方式传递to:首先创建对象,调用方法来设置值,然后将其传递给另一个对象方法。使用Java初始化新对象并设置值8

To to = new To(); 
to.setEmail("[email protected]"); 
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?); 
+3

制作'To'不变(可选,推荐使用),并提供了可同时接收电子邮件和名称的构造函数。 –

+2

如果你想链接你的方法 - 让他们返回它们被调用的对象。 –

+0

我对Lambda表达式不太熟悉。但是,这可能是我可以用Lambda表达式做的事情吗? – Arya

回答

2

不符合POJO方法。您可以在To中创建一个构造函数,将所有需要的字段作为参数或者用于构建器模式。

+0

_“不符合POJO方法”_您是否说您的解决方案不会创建对象? – zeroflagL

+1

好吧,所以术语“POJO”在这里可能有点混乱。我的错。我们对Java Bean使用了几年的“POJO”这个术语,它有一些属性,一个默认的构造函数以及getters和setter。 –

0

这是唯一可能的,如果没有在类的构造函数给带有提到的参数是这样的:

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("[email protected]","John Smith"))); 
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类接受名&电子邮件。然后,可以按如下方式重新写它:

Headers headers = new Headers(); 
Supplier<List> toSupplier =() -> Arrays.asList(new To("John Smith","[email protected]")); 
headers.setTo(toSupplier); 

OR

Headers headers = new Headers(); 
headers.setTo(() -> Arrays.asList(new To("John Smith","[email protected]"))); 
+1

您的供应商如何更简单? – zeroflagL

+1

除了使用* raw types *,拼写错误的方法名称和不鼓励的编码风格(使用'forEach'添加到列表而不是收集)以及误导性的方法名称之外,'setTo'实际上的效率相当于'addAll',我必须像@zeroflagL一样询问,通过'Supplier'提供列表和额外的复制操作应该解决什么问题? – Holger

+0

我基本上正在尝试使用lambda表达式来编写它。 *(对于错别字,我没有使用任何IDE,我只是在文本编辑器中输入了整个内容)* –

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("[email protected]","John Smith"));