【发布时间】:2018-01-20 08:16:10
【问题描述】:
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);
我有一堆丑陋的成员变量需要整理成一个列表。 Phone 对象没有很好的构造函数,我无法更改它。
如何在不定义三个临时对象p1, p2, p3 的情况下从成员变量中创建此列表?
【问题讨论】:
-
您可以为
Phone类创建一个构造函数,采用 3 个参数。如果Phone类中有很多字段,您也可以使用builder pattern来帮助创建电话的对象。 -
要删除重复的
add()语句,您需要Java 9 的List.of()或Guava 的ImmutableList.of()。 -
List<Phone> phones = Arrays.asList(p1, p2, p3)如果您不使用 java 9,也可以使用。 -
如果
Phone是final,但实现了一个接口,您可以使用reflect.Proxy- 带有或(乏味,而不是反对第 3 方代码)没有原始Phone的实例班级。 (我想我会因为不得不重复 setter 调用而不是使用其他无用的变量(或数组)而被推迟。)
标签: java algorithm arraylist lambda