Java API for Lotus Notes 中的方法返回 Vector 而不是 ArrayList



如果我需要检索字段的值,我将需要使用这个函数

public java.util.Vector getItemValue(String name) throws NotesException

嗯,这个方法和 Lotus Notes Java API 中的任何其他方法一样,返回Vector对象。在这个答案中解释说,矢量已经过时了。但是这个关于同一问题的答案让我认为使用 Vector 可能是必要的。

尽管枚举速度更快,但它们不会检查集合是否 在迭代过程中进行了修改,这可能会导致问题,并且考虑到 可以选择矢量进行同步 - 与服务员同步 来自多个线程的访问,这使得它特别有害 问题。

当我们使用 Lotus Notes Java API 时,如果我们将生成的Vector对象转换为ArrayList对象,是否有任何问题?

Vector<String> vector = (Vector<String>) doc.getItemValue("somefield");
ArrayList<String> list = new ArrayList<String>(vector);

或者,一般来说,不建议进行此转换?

编辑:以防万一,我不想/需要使用Vector对象,但Lotus Notes Java API中的方法总是返回它。因此,我有两个选择:(1(始终将Vector对象转换为ArrayList或任何其他更好的选项,或(2(仅使用Vector对象。

简而言之,我的疑问是:在这种情况下将矢量对象转换为 ArrayList 是否安全?

您可以将 Vector 转换为更现代的集合。但是你必须确保不使用Java 7的功能或类。

据我所知,IBM Notes 仍然使用 IBM Java 6 VM。

泛型是危险的,因为我不确定,向量中getItemValue()返回的每个项目都是字符串。

更新

我更喜欢使用Vector,因为这就是 API 的工作方式。

事实上,IBM Notes/Domino API是某种可怕的。有一个来自openNTF的API包装器。

不要使用已弃用的 Vector s。它们是出了名的慢。

如果需要同步列表,可以将任何列表转换为

syncList = Collections.synchronizedList(list);
Vector已被

弃用多年。除非您特别需要它的线程安全性,否则只需使用ArrayList - 它会更快。即使您确实要求集合是线程安全的,现代 JDK 中也有更好的选择,例如 CopyOnWriteArrayList

最新更新