Java 调用 Vector.set() 导致 'unchecked' 警告

Java call to Vector.set() results in 'unchecked' warning

我正在扩展 javax.swing.table.DefaultTableModel,并正在添加一个方法,该方法在 class 变量上调用 Vector.set(...)。它会导致 unchecked 警告,我想修复而不是抑制。由于这不是扩展 Vector,我似乎无法使用 <E>,而且我无法知道 [=18] 中的 Object 是什么类型=].建议?

方法:

/**
 * Replace a row in the dataVector.  Convenience method for 
 * getDataVector().set(index, element)
 * @param rowNum the index of the row to replace
 * @param replaceRow the element to be stored at the specified position
 * @return the element previously at the specified position
 * @throws ArrayIndexOutOfBoundsException if the index is out of range
 */
public Vector setRow(int rowNum, Vector replaceRow) {
  return (Vector)dataVector.set(rowNum, replaceRow);
}

这导致:

warning: [unchecked] unchecked call to set(int,E) as a member of the raw type Vector
return (Vector)dataVector.set(rowNum, replaceRow);
                             ^
where E is a type-variable:
E extends Object declared in class Vector
1 warning

抱歉,我没有意识到 DefaultTableModel 正在为 dataVector 使用未参数化的原始类型。我认为在这种情况下,您真正​​能做的就是为该函数添加一个 @SuppressWarnings("unchecked") 注释(这将使编译器停止抱怨),对其进行彻底的 javadoc 处理,然后收工:

/* DOCUMENT THIS THOROUGHLY */
@SuppressWarnings("unchecked")
public Vector setRow(final int rowNum, final Vector replaceRow) {
    return (Vector)dataVector.set(rowNum, replaceRow);
}

旧答案:

根据您的代码,看起来您真正想要做的是:

Vector<Vector<Object>> dataVector = new Vector<Vector<Object>>();

public Vector<Object> setRow(final int rowNum, final Vector<Object> replaceRow) {
    return dataVector.set(rowNum, replaceRow);
}

您的代码是 written/designed 的方式,看起来 dataVector 实际上是一个 "Vector of Vectors",其中每个元素(向量)可以包含任何类型的对象?在您的函数中以这种方式使用泛型,dataVector 将消除未经检查的警告。

如果我理解有误,请告诉我。