Java 8具有许多功能,允许您避免使用临时变量和函数,似乎必须有一种方法可以避免使用这些临时值来创建此列表:
List<Phone> phones = new ArrayList<>();
Phone p1 = new Phone();
p1.setNumber(this.mainPhoneNumber);
p1.setExtension(this.mainPhoneExt);
p1.setType(this.mainPhoneDesc);
phones.add(p1);
Phone p2 = new Phone();
p2.setNumber(this.secondaryPhoneNumberOne);
p2.setExtension(this.secondaryPhoneExtOne);
p2.setType(this.secondaryPhoneDescOne);
phones.add(p2);
Phone p3 = new Phone();
p3.setNumber(this.secondaryPhoneNumberTwo);
p3.setExtension(this.secondaryPhoneExtTwo);
p3.setType(this.secondaryPhoneDescTwo);
phones.add(p3);
我有一堆丑陋的成员变量需要整理成一个列表。 <{1}}对象没有一个好的构造函数,我无法改变它。
如何在不定义三个临时对象Phone
的情况下从成员变量创建此列表?
答案 0 :(得分:4)
如果您可以修改Phone
以使定位符可链接,那么您可以瞄准:
phones.add(
new Phone()
.setNumber(this.mainPhoneNumber)
.setExtension(this.mainPhoneExt)
.setType(this.mainPhoneDesc)
);
如果不可能,您可以创建外部构建器类。使用它看起来像:
phones.add(
new PhoneBuilder()
.number(this.mainPhoneNumber)
.extension(this.mainPhoneExt)
.type(this.mainPhoneDesc)
.build()
);
实现构建器类很乏味,但很简单。将所有字段值存储在成员变量中,然后在调用Phone
时创建实际的build()
对象。您会发现自己重复了很多Phone
方法名称。不要担心,这是正常的。
答案 1 :(得分:3)
你可以这样做吗?
public Phone phoneMaker(int number, int ext, string description) {
Phone p = new Phone();
p.setNumber(number);
p.setExtension(ext);
p.setType(description);
return p;
}
List<Phone> phones = new ArrayList<>();
phones.add(phoneMaker(this.mainPhoneNumber, this.mainPhoneExt, this.mainPhoneDesc));