Java 返回数据结构以显示信息
我在SESE上读到关于封装和getter/setter的文章。假设我喜欢使用不可变类,那么如果实现了setter,它将返回一个反映更改的新对象,例如:Java 返回数据结构以显示信息,java,oop,encapsulation,Java,Oop,Encapsulation,我在SESE上读到关于封装和getter/setter的文章。假设我喜欢使用不可变类,那么如果实现了setter,它将返回一个反映更改的新对象,例如: //return a new Book reflecting the price change. public Book updatePrice(double price){} 在链接中,答案表明我有一个名为getDisplayinformation()的方法,它返回一个数据结构 (考虑由枚举、结构或无方法类索引的数组) 按照这个建议,我如何归
//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
}
公共最终类作者{
私有最终字符串id;
私有最终字符串名;
私有最终字符串lastname;
//建造师
}
公开期末课本{
私有字符串bookID;
私人最终字符串标题;
私人名单作者名单;
私人双价;
//建造师
}
假设我想返回一个映射
publicmap getDisplayinformation(){
Map displayMap=newhashmap();
显示.放置(“书名”,书名);
显示。放置(“ID”,bookID);
display.put(“Price”,Price.toString())
//插入作者列表;
返回显示地图;
}
你引用的答案有一半是对的。为字段提供getter会破坏封装,因为它使调用程序依赖于某些内部结构
现在,返回一个调用方需要知道键并知道该信息是什么的映射,基本上与为该字段提供getter没有什么不同
面向对象试图告诉我们,功能需要与数据捆绑在一起。因此,书
必须有一些方法来呈现书
。我不会称之为getDisplayInformation()
,而只是简单地称之为display()
。它可以返回一些东西,也可以获取相关参数
关键是,display()
返回的任何内容都必须与演示文稿有关,而不能与书籍有关。关于成为一本书的语义应该在这一点上丢失,否则调用方将紧密耦合
因此,可以返回XML文档、JSON文档、HTML、Wicket组件
,无论是什么,都可以用于独立于书籍
的表示
或者,该方法可以使用一个参数来呈现自己。比如AWTComponent.paint(图形g)
之类的
注:这实际上是一个有争议的话题。混合范式开发(过程开发和面向对象开发的混合)会认为表示需要与对象分离,而面向对象则认为数据和功能总是属于一起的。为什么不在book类上实现toString方法?我看不出这张地图的用途。但是你可以把一个列表变成一个字符串,所以我不理解你的问题。我提供的SESE链接上的答案建议了一个数据结构,以返回我想要显示的字段,而不破坏封装。如果我想显示所有字段,我必须为每个字段提供一个getter。这不是个糟糕的设计吗?我同意@cricket_007的观点。
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;
}