2014-10-30 79 views
0

我有一个ClassAClassB实现这样的:改变从一个类的向量元素到另一个

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

您的代码将无法编译。您正尝试将ClassB对象设置为Vector 的矢量,ClassB不扩展ClassA – 2014-10-30 13:58:26

+0

@AleksG您是对的。谢谢。我修复了代码,因为它现在正在我的应用程序中工作。 – 2014-10-30 14:00:57

回答

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的角度来看,阶级关系似乎很古怪。如果ClassAClassB之间没有任何有意义的差异,那么您应该调查,如果您需要这两个类,或者对它们有一个有用的抽象(关于分离关注点)。

+0

我正在开发一个访问Lotus Notes数据的Java代码,'ClassA'是'lotus.domino.DateTime','ClassB'是'java.util.Date'。正如您所看到的,它们具有相同的数据,但方式不同,因为它们来自不同的库。谢谢您的回答。 – 2014-10-30 14:32:45

1

如果您使用的是Java 8,你可以这样做:

final List<ClassA> listA = new ArrayList<>(); 
    final List<ClassB> listB = listA.stream().map(x -> x.toClassB()).collect(Collectors.toList()); 
相关问题