Java - 已弃用的方法 - 该怎么办?
我正在学习一系列Java教程。我有一个关于教程的问题72.Java - 已弃用的方法 - 该怎么办?
链接: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"};
相比(如视频所示):声明变量,如上面的类外,但里面的方法分配值给他们?
要么性能更好?
根据JList
的javadoc Java7我看到你确实没有别的选择 - 这两种API(getSelectedValuesList
和setDataList
)无关。
要解决这个问题,一个简单的解决方案是执行LeftList.getSelectedValuesList().toArray()
- 它将为您提供一个适合于setDataList
的阵列。免责声明:我不知道这是否是Java推荐的“正确”用法,但它应该起作用。另外,请注意,不赞成使用的API并不意味着它不起作用 - 如果您觉得现在不想投入时间,那么仍然可以使用旧的API(例如在您的情况下做一个教程,而不是一些正在进行的产品,将在未来10年的生产)
至于第二个问题 - 这是一个味道的问题,我更喜欢声明变量,而不需要在类声明和设置中初始化它们他们与构造函数中的值。习惯上给常量赋初值(例如public static final String AAA = "XYZ";
)
你需要更新setListData
方法采取新的参数类型(以及所期待的Object[]
,包括迭代这个数组方法,可能事情任何其他代码等),仅仅因为一些已经过时没有按这并不意味着删除,但。
要做什么取决于您的直接目标:是学习材料还是学习材料和更新所有源以编译时不带警告。
我看了一下有问题的教程。
你对API的问题,你需要做到以下几点:
rightList.setListData(leftList.getSelectedValuesList().toArray());
PS:关于风格的一些技巧。在Java中,变量通常以小写字母开头,类名以大写字母开头。在上面的代码中,它向我展示了您试图在类上调用静态方法,因此您可能需要将名称更改为小写。
啊,谢谢。它现在有效,只给我一个关于类型的错误,我很高兴忽略它。我会牢记样式提示,因为按照适当的约定比我自己的约定更重要。 =) – Deley
你在问初始化*变量,而不是*声明*它们。此外,这不是“课外”,而是一种方法。初始化*变量的位置取决于它们的使用方式,通常是一种偏好问题。性能差异通常可以忽略不计,除非您创建*巨大数量的数字并在创建时初始化变量,而不是根据需要进行初始化。 –
好的,谢谢你的回复。我倾向于交替使用这样的术语,对于任何混淆抱歉。我应该使用正确的术语,谢谢提醒。 =) – Deley
'LeftList'是什么类型的变量?它是JList吗?同时显示实际的错误信息,而不是你对它的解释。 –