所以我的应用程序有一个有ArrayList的客户类。 因此,例如,一些客户将拥有旅行保险,而一些客户将拥有房屋保险和汽车保险。
我正在尝试获取在gui中打印的保险的详细信息,但是我在随意购买特定保险方面遇到问题。
在我的gui中,我希望一页显示旅行保险,另一页显示同一客户的船舶保险。我的麻烦是,当我获得数组列表时,我不知道这些承保的顺序,因此我在客户类别中成为了方法
class Customer {
private String name;
//and so on
private ArrayList<AbstractInsurance> list;
public CarInsurance getCarInsurance () {
for (insurance i : list) {
if (i.getName().equals("Carinsurance") {
returnt (CarInsurance) i;
}
}
}
}
但是,这似乎是一种不好的做法,因为我认为客户类别不应负责寻找特定的保险。每当客户想要购买他们尚未购买的保险时,它也会返回nullpointer。
有什么想法吗?
答案 0 :(得分:0)
我想有很多方法可以解决这个问题,但这是我的方法。从您的代码中得出的结论是,客户最多只能购买一份保险,因此我将使用枚举和Map代替
enum InsuranceType {
CAR,
BOAT,
HOME
// and so on...
}
然后我将带有枚举的保险对象存储在Customer类或类似类的映射中,因为它是针对每个客户的
Map<InsuranceType, AbstractInsurance> insurances = new HashMap<>();
以及访问它们的方法
public AbstractInsurance getInsurance(InsuranceType type) {
return insurances.get(type);
}
此方法当然可以返回null,但由于无法避免,因此您需要在调用它时对其进行处理。
如果您愿意,还可以添加便捷方法来获得特定的保险,例如
public CarInsurance getCarInsurance() {
return (CarInsurance) insurances.get(InsuranceType.CAR);
}
对于Java 8和更高版本,您可以让方法返回Optional以避免空指针异常问题
public Optional<AbstractInsurance> getInsurance(InsuranceType type) {
return Optional.of(insurances.get(type));
}
public Optional<CarInsurance> getCarInsurance() {
return Optional.of((CarInsurance) insurances.get(InsuranceType.CAR));
}
答案 1 :(得分:0)
这是一种实现方法:
class Customer {
private String name;
//and so on
private List<AbstractInsurance> list;
public Optional<CarInsurance> getCarInsurance () {
return list.stream()
.filter(insurance -> insurance instanceof CarInsurance)
.findFirst();
}
}
然后检查是否为Optional.isPresent()。
但是我还是重新考虑该解决方案,就像建议使用Map一样,修改AbstractInsurance以包括具有保险类型的Enum ...