Java-вызов Vector.set () приводит к предупреждению «unchecked»

1

Я расширяю 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
  • 0
    Хм, если бы вам пришлось расширять класс, чтобы использовать с ним дженерики, тогда дженерики были бы более или менее бесполезны.
  • 0
    Я не расширяю класс, чтобы использовать дженерики, я расширяю его, потому что я хотел класс Table, а таблица - это Vector of Vectors. Я думаю, что DefaultTableModel здесь красная сельдь. Я просто создаю метод, который вызывает Vector.set () и выдает предупреждение.
Показать ещё 1 комментарий
Теги:
vector
suppress-warnings
defaulttablemodel
unchecked

1 ответ

2
Лучший ответ

К сожалению, я не понимал, что 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 устранит непроверенные предупреждения.

Если я неправильно понял, пожалуйста, дайте мне знать.

  • 0
    Правильно, dataVector - это вектор векторов. Это переменная класса DefaultTableModel.
  • 0
    Смотрите ссылку
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню