类型List <testlist>中的方法add(TestList)不适用于参数(String)

时间:2017-03-04 17:14:53

标签: java list arraylist collections

我是Java的初学者,我试图通过创建简单的程序来学习List的概念。基本上,我有两个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;
    }
}

有谁可以告诉我为什么List add方法会出现上述编译错误?如果我的TestList.java在真实场景中是可行的,还请告诉我吗?

2 个答案:

答案 0 :(得分:0)

方法l1.add()具有签名List<TestList>.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);可以解决您的问题。

答案 1 :(得分:0)

  

我正在考虑创建一个名称,年龄和empid的列表。有没有办法实现这个目标?

将错误行更改为

tl.add(l1);

就是这么简单。

你所做的一切都是正确的,直到上面一行。您创建了一个类TestList,它基本上是一组名称,年龄和empid。您创建了一个可以存储TestListnew ArrayList<TestList>()的列表。你唯一没做的就是把东西放进清单。您不需要将每个名称,年龄和empid放入列表中,只需将整个l1对象放在那里,因为这是ArrayList应该存储的内容!

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