改变从一个类的向量元素到另一个
问题描述:
我有一个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
,因为它是在原来的代码。
答
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
之间没有任何有意义的差异,那么您应该调查,如果您需要这两个类,或者对它们有一个有用的抽象(关于分离关注点)。
+0
我正在开发一个访问Lotus Notes数据的Java代码,'ClassA'是'lotus.domino.DateTime','ClassB'是'java.util.Date'。正如您所看到的,它们具有相同的数据,但方式不同,因为它们来自不同的库。谢谢您的回答。 – 2014-10-30 14:32:45
答
如果您使用的是Java 8,你可以这样做:
final List<ClassA> listA = new ArrayList<>();
final List<ClassB> listB = listA.stream().map(x -> x.toClassB()).collect(Collectors.toList());
您的代码将无法编译。您正尝试将ClassB对象设置为Vector的矢量,ClassB不扩展ClassA –
2014-10-30 13:58:26
@AleksG您是对的。谢谢。我修复了代码,因为它现在正在我的应用程序中工作。 – 2014-10-30 14:00:57