<分区>
我被告知要根据以下代码示例开发我的代码:
Class Dogs{
List<Dog> listOfDogs = new ArrayList<Dog>();
// Setters, getters...
}
Class Dog{
// Attributes and methods
}
问题是:为什么将Dogs
类实现为Dog
对象的ArrayList 的容器比仅仅引用一个简单的ArrayList 更好。
这算是封装吗?
<分区>
我被告知要根据以下代码示例开发我的代码:
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/