java - 容器类的习惯用法

标签 java class containers idioms

<分区>

我被告知要根据以下代码示例开发我的代码:

Class Dogs{
   List<Dog> listOfDogs = new ArrayList<Dog>();
   // Setters, getters...
}

Class Dog{
   // Attributes and methods
}

问题是:为什么将Dogs 类实现为Dog 对象的ArrayList 的容器比仅仅引用一个简单的ArrayList 更好。 这算是封装吗?

最佳答案

基本上,创建一个 Dogs 类可以为您提供额外的间接层。

这意味着您的所有其他代码将仅引用(即使用)Dogs 类,而不是内部列表。反过来,这意味着每当您决定从使用列表切换到,比方说,在内部使用普通数组(或者以任何其他方式更改 Dogs 的实现,就此而言),您可以很容易做到这一点。

这就是它的动力。至于它是否“更好”的问题,这在很大程度上取决于您是否可以通过稳定的 Dogs API 限制内部容器的使用。如果可以,创建一个 Dogs 类是合理的。否则,继续使用 List 会更简单、更容易。

上述“稳定 API”的一个示例是访问者模式的应用程序。在这种情况下,Dogs 类应该有一个接受访问者参数的visit() 方法。访问者“知道”如何处理 Dog,但完全不知道 Dogs 的内部结构。这是一件好事。

关于java - 容器类的习惯用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23632094/

相关文章:

java - 如何正确使用模拟进行单元测试

java - hadoop分布式副本覆盖不起作用

Java - 获取文件的缩略图并调整大小

python - __dict__ 不知道类的某些属性

java - 在java中的3个类中调用另一个类中的方法

c++ - 单词之间的摩尔斯电码空格问题

java - Spring Data Jpa 和规范 - 如何处理 ManyToOne 和 ManyToMany 关系?

python - 看似简单的类方法的类型推断错误

nginx - 在单个服务器中管理和使用多个 Docker 容器(微服务)

python - 从列表中删除字典的子集