0

我有一个这样的组合框:

static final String[] intString = {"Dist.","4","5","6","7","8"};
static JComboBox numList = numList = new JComboBox(intString);

我需要抓取选择了哪个项目并将其转换为 int 类型。我用这个:

Integer.parseInt(numList.getSelectedItem().toString()

但老实说,不明白为什么它会起作用。如果我不包括“toString()”,则相关的错误是:

parseInt(string) in Integer cannot be applied to Object

那么,我传递了一个字符串,列表中的项目现在是对象吗?我知道,当您拥有一个类并对其进行实例化时,您实际上是在创建对具有该类的所有关联方法和实例变量的对象的引用。但除了这个概念之外,我不了解对象的创建、时间和原因。

为什么列表中的项目现在是对象,以及如何将对象转换为字符串?我知道您可以在引用超类时传递子类:

ArrayList<Object> dogList = new ArrayList<Object>();
Dog yorkie = new Dog(); 
dogList.add(yorkie); //since Dog extends object
Dog doberman = (Dog) dogList[0]; //re-cast to original type

也许这个概念是相似的。

谢谢你。

4

3 回答 3

4
Integer.parseInt(numList.getSelectedItem().toString()

getSelectItem() 方法返回一个对象。您会收到错误消息(当您不使用 toString() 方法时),因为 parseInt() 方法需要一个字符串。

那么,我传递了一个字符串,列表中的项目现在是对象吗?

对象仍然是一个字符串,所以你可以这样做:

Object selected = numList.getSelectedItem();
String selectedString = (String)selected;
Integer.parseInt( selectedString );
于 2013-06-13T23:24:15.960 回答
2

尝试:

List<Dog> dogList = new ArrayList<>();

并覆盖类toString():String中的方法Dog

toString()如果您的自定义类中没有定义,那么它可能会返回指向该对象的内存的指针。

于 2013-06-13T23:23:00.487 回答
2

getSelectedItem将返回 的类型Object,这显然与 的期望不兼容Interger.parseInt(String)

所有类都扩展自Object,因此所有内容都可以在Object预期的地方传递和使用。它是最小的公分母。

方法之一ObjecttoString方法。 String#toString简单返回自身。

例如。你是一个Human,你也被称为sherrellbc(可能还有其他名字)。所以,如果我有一个方法Human作为参数,我可以将你传递给它,因为你可以被强制转换并被视为Human.

于 2013-06-13T23:25:12.250 回答