我真的不知道标题是否合适。
我有两个选择: 选项1:
Class A {
ArrayList<B> BList = new ArrayList<B>();
public B[] getBList() {
return (B[])BList.toArray();
}
}
Class Facade {
public B[] getAllB(){
A a = new A();
return a.getBList();
}
}
选项2:
Class A {
ArrayList<B> BList = new ArrayList<B>();
public ArrayList getBList() {
return BList;
}
}
Class Facade {
public B[] getAllB(){
A a = new A();
ArrayList BList = a.getBList();
return (B[])BList.toArray();
}
}
我应该使用哪个选项?
答案 0 :(得分:3)
使用集合类,除非您有特定的理由使用数组。所以,我选择选项2。
可以对您的代码做出许多其他评论。
首先,最好program to an interface, not an implementation - 将班级BList
中的成员变量A
改为List<B>
而不是ArrayList<B>
。此外,成员变量应为private
(除非有充分的理由使它们不是private
)。第三,尽可能使用泛型 - 为什么你的方法getBList()
会返回原始ArrayList
? Java中变量的事实命名标准是camel case,从小写字母开始。所以不要调用成员变量BList
,而是bList
(或其他一些更好的名字)。
class A {
private List<B> bList = new ArrayList<B>();
public List<B> getBList() {
return bList;
}
}
课程Facade
是否真的有必要返回B[]
?
要考虑的另一点是让您的类A
不可变,因为如果您从A
对象获取列表,然后从列表中添加或删除元素,则可能会发生意外情况(您的A
对象中的列表也将被更改,这可能会令人困惑)。您必须在getBList()
方法中返回列表的只读视图:
public List<B> getBList() {
return Collections.unmodifiableList(bList);
}
答案 1 :(得分:1)
无论如何,我都没有强烈的偏好。但是,我注意到你正在使用一个数组来返回列表的内容,也许是为了使它不可变。相反,我建议使用Collections.unmodifiableList。
答案 2 :(得分:0)
我认为唯一的区别是A类是否是组件公共接口的一部分。
如果不是(例如只有Facade计入公共界面),那么无关紧要。
如果A类是公共接口的一部分,我会使用选项1。
答案 3 :(得分:0)
除非你真的需要,否则某些东西的原始形式是像图像这样的东西的字节[],应该总是在API中为许多东西而不是数组返回Collection类型。在您的情况下,使用Collections.unmodifiableXXX(...)包装原始Collection。