【发布时间】:2017-10-08 19:01:50
【问题描述】:
我在 SESE 上阅读 this answer 关于封装和 getter/setter 的内容。假设我赞成使用不可变类,那么如果实现了一个 setter,它将返回一个反映更改的新对象,例如:
//return a new Book reflecting the price change.
public Book updatePrice(double price){}
在链接中,答案建议我有一个名为getDisplayinformation() 的方法,它返回一个数据结构。
(想想一个由枚举、结构或无方法类索引的数组)
按照此建议,我将如何返回带有作者列表的图书?
public final class Author{
private final String id;
private final String firstname;
private final String lastname;
//Constructor
}
public final class Book{
private String bookID;
private final String title;
private List<Author> authorsList;
private double price;
//Constructor
}
假设我想返回一个Map<String,String>。
public Map<String,String> getDisplayinformation(){
Map<String,String> displayMap = new HashMap<String,String>();
display.put("BookTitle", title);
display.put("ID", bookID);
display.put("Price", price.toString())
//insert authorsList;
return displayMap;
}
【问题讨论】:
-
为什么不在 book 类上实现一个 toString 方法呢?我看不到地图的目的。但是您可以将列表设为字符串,所以我不明白您的问题
-
我提供的 SESE 链接上的答案建议了一种数据结构,可以在不破坏封装的情况下返回我想要显示的字段。鉴于我想显示所有字段,我必须为everone 提供一个吸气剂。这不是糟糕的设计吗?
-
我同意@cricket_007 的观点。
标签: java oop encapsulation