【问题标题】:The method add(String) in the type ArrayList<String> is not applicable for the arguments (Object)ArrayList<String> 类型中的方法 add(String) 不适用于参数 (Object)
【发布时间】:2015-04-30 00:14:46
【问题描述】:

我正在运行以下代码:

    public ArrayList<String> equipAvail;
        {
        equButton2 = new JButton();
        equButton2.setText("Apply");
        equButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                //read the contents of equlist2 
                for(int i=0;i<equList2.getModel().getSize();i++){
                    //fill equipAvail ArrayList with the contents of equlist2 
                    //System.out.println(equList2.getModel().getElementAt(i));
                    //System.out.println(equList2.getModel().getElementAt(i) instanceof String);
                    equipAvail.add(equList2.getModel().getElementAt(i));
                    //pass equipAvail to the user's EquipmentAvailable property
                    user.setEquipmentAvailable(equipAvail);
                }
            }
        });
    }

如果我注释掉equipAvail.add(equList2.getModel().getElementAt(i)); 行,并运行当前注释掉的行//System.out.println(equList2.getModel().getElementAt(i));,它会将选择打印到控制台。 如果我运行//System.out.println(equList2.getModel().getElementAt(i) instanceof String); 行,它将报告填充到equList2 中的尽可能多的对象为真。

然而不知何故,当我尝试如图所示运行它时,它甚至无法编译。给出错误“ArrayList 类型中的方法 add(String) 不适用于参数 (Object)”。如果我在equipAvail 行的末尾使用.toString(),它会编译,但是当我单击GUI 中的按钮时会出现同样的错误。

我需要 equipAvail 成为一个 ArrayList 并填充出现在 equList2 中的所有字符串。

为什么我不能使用 equilAvail.add 将这些我知道是字符串的对象添加到 ArrayList 中?

如何使用 equList2 中的条目填充 equiAvail?

谢谢!!

关于上下文,注意equList2 的生命是这样开始的:

    private JList getEquList2() {
    if(equList2 == null) {
        ListModel equList2Model = 
            new DefaultComboBoxModel(
                    new String[] {""});
        equList2 = new JList();
        equList2.setModel(equList2Model);
        equList2.setVisibleRowCount(4);
    }
    return equList2;
}

但随后使用与“移动”按钮绑定的equList2.setListData(equList1.getSelectedValues()); 命令更新以包含一些附加数据,该按钮将 equList1 条目的子集移动到 equList2。

【问题讨论】:

    标签: java string arraylist jlist


    【解决方案1】:

    ListModel 是泛型类型,但您将其用作原始类型。

    也许ListModel&lt;String&gt; = new DefaultComboxBoxModel&lt;String&gt;(new String[] {""})

    【讨论】:

    • 感谢您的快速回复!我进行了此更改,并将每个JList 更改为JList&lt;String&gt;。不幸的是,更新它并没有解决问题 - 我遇到了同样的错误。有什么方法我还需要修改equList2.setModel(equList2Model); 行吗?
    • @jaydex 我忘了equList2 本身。它应该被声明为 JList&lt;String&gt; 并且方法 getEquList2 的返回类型也应该是 JList
    • @jaydex 通常,您不应该使用原始类型。当您查看 javadoc 时,您会看到 Something&lt;E&gt; 的类型,这表明这是一个泛型,您需要为 E 填写一些内容。因此,在代码中使用泛型的任何地方,都要指定类型。
    • 我确保不再将所有 JList 实例用作泛型(全部用作 JList)。 IDE 中不再有关于原始类型等的警告。但是,问题仍然存在,即字符串 equList2.getModel().getElementAt(i) 不会使用 equipAvail.add(equList2.getModel().getElementAt(i)) 传递到“ArrayListequipAvail”。我在生产线上得到了一个 NPE。还有其他建议吗??
    • 我想通了!我需要在 for 循环之前添加 equipAvail = new ArrayList&lt;String&gt;(); 来初始化它。非常感谢您的帮助!!
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2012-06-24
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多