我有ClassA
和ClassB
这样实现:
Class ClassB {
//[...]
}
Class ClassA {
//[...]
public ClassB toClassB() {
//[...]
return new ClassB("Some data");
}
}
另外,我有一个向量,其元素是ClassA
个对象:
Vector vector;
vector.add(new ClassA("AAA"));
vector.add(new ClassA("BBB"));
vector.add(new ClassA("CCC"));
此代码将矢量元素从ClassA
更改为ClassB
:
for (int i = 0; i < vector.size(); i++) {
vector.set(i, ((ClassA) vector.get(i)).toClassB());
}
有没有更简单/有效的方法来做同样的事情?
编辑:我将矢量类型从Vector<ClassA>
更改为仅Vector
,就像它在原始代码中一样。
答案 0 :(得分:1)
public static Vector<ClassB> convert(Vector<ClassA> v){
Vector<ClassB> result = new Vector(v.size());
for(ClassA a : vector){
result.add(a.toClassB());
}
//optional: v.clear()
return result;
}
这个静态方法可以在任何类中(由于内聚力,它可能应该在ClassA
中)。从oop的角度来看,阶级关系似乎很奇怪。如果ClassA
和ClassB
之间没有任何有意义的差异,您应该调查,如果您需要这两个类,或者是否有一个有用的抽象(关于关注点的分离)。
答案 1 :(得分:1)
如果您使用的是Java 8,则可以执行以下操作:
final List<ClassA> listA = new ArrayList<>();
final List<ClassB> listB = listA.stream().map(x -> x.toClassB()).collect(Collectors.toList());