【问题标题】:The method add(TestList) in the type List<TestList> is not applicable for the arguments (String)List<TestList> 类型中的方法 add(TestList) 不适用于参数 (String)
【发布时间】:2017-03-04 17:14:52
【问题描述】:

我是 Java 初学者,我正在尝试通过创建简单的程序来学习列表的概念。所以基本上,我有两个 java 文件:CallListClass.java 和 TestList.java。

CallListClass.java

package javaSrc;

import java.util.*;

public class CallListClass {

    public static void main(String[] args){

        List<TestList> tl = new ArrayList<TestList>();
        //TestList tlobj = new TestList();
        TestList l1 = new TestList();
        l1.setname("MARY");
        System.out.println("Value of name::"+l1.getname());
        tl.add(l1.getname()); //Error on this line-The method add(TestList) in the type List<TestList> is not applicable for the arguments (String)
    }
}

TestList.java

package javaSrc;

public class TestList{

    int age;
    String name ="";
    int empid;

    int getage()
    {
        return this.age;
    }

    String getname()
    {
        return this.name;
    }

    int getempid()
    {
        return this.empid;
    }

    void setage(int age)
    {
        this.age = age;
    }

    void setname(String name)
    {
        this.name = name;
    }

    void setempid(int empid)
    {
        this.empid = empid;
    }
}

谁能告诉我为什么Listadd 方法会出现上述编译错误?另外请让我知道我的 TestList.java 在现实世界的场景中是否可行?

【问题讨论】:

  • 您正在尝试将文本添加到列表列表中。这是不允许的。你想做什么?
  • tl.add(l1) 会工作
  • 您是否尝试过阅读并理解错误消息?它表示您正在尝试调用方法add(TestList),以TestList 作为参数,以String 作为参数。字符串不是 TestList。
  • tlTestList 的列表。您可以向其中添加TestList 的实例,而不是String 的实例。如果要将字符串添加到列表中,则需要 List&lt;String&gt;
  • 我正在考虑创建一个包含姓名、年龄和 empid 的列表。我们有什么办法可以做到这一点?

标签: java list arraylist collections


【解决方案1】:

我正在考虑创建一个包含姓名、年龄和 empid 的列表。有没有办法实现这一点?

将错误行改为

tl.add(l1);

就是这么简单。

在上述行之前,您所做的一切都是正确的。您创建了一个类TestList,它基本上是一组名称、年龄和empid。您创建了一个可以存储TestList:new ArrayList&lt;TestList&gt;() 的列表。您唯一没有做的就是将东西放入列表中。您不需要将每个姓名、年龄和 empid 放入列表中,只需将整个 l1 对象放入其中,因为这是 ArrayList 应该存储的内容!

此外,还有其他一些小问题。你应该为你的类命名一个比TestList 更有意义的名字。您还应该将getname 重命名为getName,将getage 重命名为getAge,等等。

【讨论】:

  • 谢谢!我知道命名约定,但我主要关注逻辑。下次我会发布有意义的名字:)
  • @S_T 如果您认为某个答案可以回答您的问题,请考虑通过单击该复选标记来接受它!
【解决方案2】:

方法l1.add() 的签名是List&lt;TestList&gt;.add(TestList value),所以添加的值应该是TestList 类型。但是,l1.getName() 的结果是String,因此无法添加到列表中。例如:

    List<MyObject> list = new ArrayList<>();

    MyObject obj = new MyObject();

    //Not correct
    list.add(obj.getClass());
    list.add(obj.toString());

    //Correct
    list.add(obj);

tl.add(l1.getname()); 替换为tl.add(l1); 应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多