无法解析ArrayList的构造函数

时间:2016-08-16 19:18:16

标签: java android arraylist

我创建了一个新类和一个这样的构造函数:

public class Person {
  String firstName;
  String lastName;
  String pass;

  public Person(){}

  public Person(String f,String l,String p){
    firstName=f;
    lastName=l;
    pass=p;
  }
}

然后我在MainActivity中创建了一个对象:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    ArrayList<Person> list = new ArrayList<Person>();
    ArrayList<Person> list2 = new ArrayList<Person>("a","b","c");
}

问题是我有这样的信息:

  

无法解析构造函数&#39; ArrayList(java.lang.String,java.lang.String,java.lang.String)&#39;

并且在Person类中表示从不使用构造函数。

我做错了什么?

5 个答案:

答案 0 :(得分:3)

您正在构建人员列表。但是你提供了创建PERSON的论据。

你可以把它写成:

list2 = new ArrayList<>(Arrays.asList(new Person("a","b","c")));

或者:

list2 = new ArrayList<>(Collections.singletonList(new Person("a","b","c")));

在其他语言中,可能存在“隐含”(在封面之后)查找“匹配”功能;因此,当您提供创建Person的参数时,将调用相应的构造函数。

在Java中,这不起作用。并注意:即使这样可行; ArrayList 有一个构造函数,它接受对象并将它们添加到列表中。

长话短说:你必须使用不同的语法。你可以使用其他人的建议;或者如果您更喜欢“oneliner”(但“更昂贵”)解决方案......尝试玩我的建议。当然:研究我正在使用的库函数的javadoc;因为他们对返回的列表设置了一些限制。

从4castle获取输入:最好强制执行左侧的列表类型,例如:

List<Person> list2 = Arrays.asList<>(new Person("a","b","c"));

含义:如果可能,请使用基本集合接口;而不是他们背后的具体课程。这将允许您稍后更改实际实现。但是,如果您在整个地方使用“ArrayList”,则必须更改修复该类型的每个位置。因此,最好尽可能避免这种情况!

答案 1 :(得分:0)

您正在实例化ArrayList,而不是Person。 对于您的第二个列表,请尝试以下方法:

ArrayList<Person> list2 = new ArrayList<Person>();
list2.add(new Person("a","b","c"));

创建Person后,您需要声明add个对象及List个对象。

答案 2 :(得分:0)

这条线路似乎是罪魁祸首:

 ArrayList<Person> list2 = new ArrayList<Person>("a","b","c");

试试这个:

ArrayList<Person> list2 = new ArrayList<Person>();
Person p = new Person("a","b","c");
list2.add(p)

答案 3 :(得分:0)

您正在使用字符串而不是人。

你需要做这样的事情:

ArrayList<Person> list = new ArrayList<Person>();
Person p = new Person (first, last, pass);
list.add (p);

你也可以试试这个:

ArrayList<Person> list = new ArrayList<Person>() {{
    add(new Person (first1, last1, pass1));
    add(new Person (first2, last2, pass2));
    add(new Person (first3, last3, pass3));
}};

如果有帮助,请告诉我。如果不是,我可以尝试更多。

答案 4 :(得分:0)

遇到此类问题时,请始终使用java文档。 由于构造函数抱怨,最好查看documentation of the ArrayList constructor

ArrayList() - 构造一个初始容量为10的空列表。

ArrayList(Collection c) - 按照集合迭代器返回的顺序构造一个包含指定集合元素的列表。

ArrayList(int initialCapacity) - 构造一个具有指定初始容量的空列表。

这表明你绝对不能将Person对象传递给构造函数。它不需要任何东西,集合或int。 有几个对象时构造Collection的简单方法是Arrays.asList()。

正如GhostCat所提到的,以下肯定适用于您提到的场景。原因是asList将返回一个你想要的ArrayList。

List<Person> list = Arrays.asList(new Person("a","b","c")));

但是如果你要创建一个例子。你必须使用以下

Set<Person> set = new HashSet(Arrays.asList(new Person("a","b","c")));

它抱怨Person构造函数没有被使用,因为它的definetly没被使用。构造函数的使用必须始终后跟“new”关键字。在你的情况下,它不是。