Java - Устаревший метод - Что делать? - PullRequest
4 голосов
/ 18 сентября 2011

Я изучаю серию руководств по Java. У меня вопрос по учебнику 72.

Ссылка: http://www.youtube.com/watch?v=9z_8yEv7nIc&feature=relmfu

В 7:02 видео это заявление написано. Тем не менее, этот метод устарел в Java 1.7.

RightList.setListData(LeftList.getSelectedValues());

Eclipse возвращает следующую ошибку:

    Object[] javax.swing.JList.getSelectedValues()
    getSelectedValues
    @Deprecated
    public Object[] getSelectedValues()
    Deprecated. As of JDK 1.7, replaced by getSelectedValuesList()
    Returns an array of all the selected values, in increasing order based on their indices in the list.
    Returns:
    the selected values, or an empty array if nothing is selected
    See Also:
    isSelectedIndex(int), getModel(), addListSelectionListener(javax.swing.event.ListSelectionListener)

Но это возвращает ошибку: «Метод setListData(Object[]) in the type JList is not applicable for the arguments (List)'.

Как правильно заменить вышеприведенное утверждение?


Кроме того, я хочу воспользоваться этой возможностью, чтобы задать еще один не связанный вопрос. Лучше ли инициализировать переменные вне метода, например:

    private         JList       LeftList    =   new JList();
    private         JList       RightList   =   new JList();
    private         JButton     Move        =   new JButton("Move -->");

    private static  String[]    Items       =   {"Item 1", "Item 2","Item 3","Item 4","Item 5"};

По сравнению с (как показано на видео): объявление переменных вне класса, как указано выше, но присвоение им значений внутри метода?

Работает ли лучше?

Ответы [ 3 ]

9 голосов
/ 18 сентября 2011

Согласно JList javadoc для Java7 я вижу, что у вас действительно нет выбора - два API (getSelectedValuesList и setDataList) не связаны.

Чтобы решить эту проблему, простым решением будет выполнить LeftList.getSelectedValuesList().toArray() - он предоставит вам массив, подходящий для setDataList. Отказ от ответственности: я не знаю, является ли это «правильное» использование, рекомендованное Java, но оно должно работать.

Также обратите внимание, что устаревший API не означает, что он не работает - если вы чувствуете, что не хотите тратить на него время сейчас, вы все равно можете использовать старый API (как в вашей ситуации, когда вы делаете учебник, а не какой-то текущий продукт, который будет выпускаться в течение следующих 10 лет)

Что касается 2-го вопроса - это вопрос вкуса, я предпочитаю объявлять переменные без инициализации их в объявлении класса и устанавливать их со значениями в конструкторе. Обычно заданы начальные значения констант (например, public static final String AAA = "XYZ";)

3 голосов
/ 18 сентября 2011

Вам нужно обновить метод setListData, чтобы он принимал новый тип параметра (и любой другой код, который ожидал Object[], включая методы, возможные вещи, которые перебирают массив, и т. Д.) Просто потому, что что-тоне рекомендуется, но не означает, что удалено .

Что делать, зависит от вашей непосредственной цели: изучить материал или изучить материал и обновить весь исходный код для компиляции без предупреждений.

2 голосов
/ 18 сентября 2011

Я посмотрел учебник, о котором идет речь.

Для ответа на вопрос об API вам необходимо сделать следующее:

rightList.setListData(leftList.getSelectedValuesList().toArray());

PS: несколько советов по стилю.В Java переменные обычно начинаются со строчного алфавита, а имена классов начинаются с прописного алфавита.В приведенном выше коде мне показалось, что вы пытаетесь вызвать статический метод для класса, поэтому вы можете изменить имена на строчные.

...