Я расширяю javax.swing.table.DefaultTableModel
и добавляю метод, который вызывает Vector.set(...)
в переменной класса. Это приводит к unchecked
предупреждению, которое я хочу исправить, а не подавить. Поскольку это не распространяется на Vector
, я не могу использовать <E>
похоже, и у меня нет способа узнать, какой тип Object
будет в Vector
. Предложения?
Метод:
/**
* 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);
}
Как ваш код написан/спроектирован, кажется, что dataVector
на самом деле является "вектором векторов", где каждый элемент (вектор) может содержать любой объект Object? Использование дженериков таким образом в вашей функции и dataVector
устранит непроверенные предупреждения.
Если я неправильно понял, пожалуйста, дайте мне знать.