Java - Deprecated method - What to do?

那年仲夏 提交于 2019-11-30 17:33:48

问题


I am following a series of Java tutorials in an attempt to learn it. I have a question about tutorial 72.

Link: http://www.youtube.com/watch?v=9z_8yEv7nIc&feature=relmfu

At 7:02 of the video, this statement is written. However, this method has been deprecated in Java 1.7.

RightList.setListData(LeftList.getSelectedValues());

Eclipse returns the following error:

    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)

But this returns an error saying 'The method setListData(Object[]) in the type JList is not applicable for the arguments (List)'.

What is the correct way to replace the above statement?


Also, I want to take this opportunity to ask a another unrelated question. Is it better to initialize variables outside the method like so:

    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"};

Compared to (As shown in the video): Declaring variables outside the class like above, but assigning values to them inside the method?

Does either perform better?


回答1:


According to JList javadoc for Java7 I see that indeed you have no option - the two APIs (getSelectedValuesList and setDataList) are unrelated.

To solve it, a simple solution would be to perform LeftList.getSelectedValuesList().toArray() - it will provide you with an array suitable for setDataList. Disclaimer: I don't know if this is the "correct" usage recommended by Java, but it should work.

Also, note that a deprecated API does not mean it doesn't work - if you feel you don't want to invest time in it now, you can still use the old API (like in your situation where you are doing a tutorial and not some ongoing product that will be in production for the next 10 years)

As for the 2nd question - it is a matter of taste, I prefer declaring the variables without initializing them in the class declaration and setting them with values in the constructor. It is customary to give initial values to constants (e.g. public static final String AAA = "XYZ"; )




回答2:


You'd need to update the setListData method to take the new parameter type (and any other code that was expecting an Object[], including methods, possible things that iterate over the array, etc.) Just because something is deprecated doesn't mean it's removed, though.

What to do depends on your immediate goal: is it to learn the material, or to learn the material and update all the source to compile without warnings.




回答3:


I looked at the tutorial in question.

For your question about API, you would need to do the following:

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

PS: some tips about style. In Java, variables usually begin with a lowercase alphabet and class names begin with an uppercase alphabet. In your code above, it looked to me that you were trying to call a static method on a class, so you might want to change the names to lowercase.



来源:https://stackoverflow.com/questions/7461940/java-deprecated-method-what-to-do

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!