我创建了一个新类和一个这样的构造函数:
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类中表示从不使用构造函数。
我做错了什么?
答案 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”关键字。在你的情况下,它不是。