【问题标题】:Using JComboBox - why does getSelectedItem() work and Java objects?使用 JComboBox - 为什么 getSelectedItem() 工作和 Java 对象?
【发布时间】:2013-06-13 23:17:41
【问题描述】:

我有一个这样的组合框:

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

也许这个概念是相似的。

谢谢。

【问题讨论】:

  • 试试List&lt;Dog&gt; dogList = new ArrayList&lt;&gt;() ?
  • String 只是另一个Object

标签: java swing object casting parseint


【解决方案1】:
Integer.parseInt(numList.getSelectedItem().toString()

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

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

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

Object selected = numList.getSelectedItem();
String selectedString = (String)selected;
Integer.parseInt( selectedString );

【讨论】:

    【解决方案2】:

    试试:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      Object 的方法之一是toString 方法。 String#toString simple 返回自身。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多