在Java中有效地强制转换向量的元素

Chr*_*ord 4 java casting vector

是否有一种更有效的方法(最好是O(1)而不是O(n),但至少要更快地输入)来对类型的矢量进行类型转换?

public Vector<String> typecastVector(Vector<Object> objects){
    Vector<String> strings = new Vector<String>();
    for(Object o : objects)
        strings.add((String) o);
    return strings;
}
Run Code Online (Sandbox Code Playgroud)

注意

对于那些明显需要对Vector类或其他Generic类进行类型转换的人:正如接受的回答者所指出的那样,这可能是代码味道,您可能需要重构类层次结构中的代码.

具体来说,如果您还没有,则应考虑使用所述Vector或其他Generic类的类本身使用泛型.当我在自己的代码中执行此操作时,我完全消除了代码中与上述函数类似的函数需求.

如果您从未在自己的代码中实现泛型,请查看上面的"泛型"链接.您可能会惊讶地发现它们可以用于从Vector类型转换中精确实现您认为需要的功能.

Joe*_*ckx 6

如果您要做的唯一事情是从Vector <Object>转换为Vector <String>,那么您可以这样做.你必须确保矢量中的每个对象都是一个字符串!

显然,这不起作用:

    Vector<Object> objectVector = new Vector<Object>();
    Vector<String> stringVector = (Vector<String>)objectVector;
Run Code Online (Sandbox Code Playgroud)

但你可以这样做:

    Vector<Object> objectVector = new Vector<Object>();
    Vector typelessVector = objectVector;
    Vector<String> stringVector = (Vector<String>)typelessVector;
Run Code Online (Sandbox Code Playgroud)

你会得到一些警告,但代码应该可以正常工作.

如前所述,这确实感觉像代码味道.