我知道通过在类中添加构造函数有标准方法。但对于具有对象超类(具有无参数构造函数)的类,我倾向于发现使用更简单的临时对象。这种行为是否有任何不利因素。
import java.util.ArrayList;
public class Main {
public static void main(String[] args){
// data available in two separated arrays
String[] dName = {"Sam","Ben","Joye","Sarah","Tim","Lucy","Jack"} ;
int[] dAge= {10,52,53,15,12,60,21};
// Array list to put the data in
ArrayList<Person> personList =new ArrayList<Person>(7);
for (int i=0;i<dName.length;i++){
Person tempPerson = new Person();
tempPerson.name= dName[i];
tempPerson.age= dAge[i];
personList.add(new Person());
personList.set(i,tempPerson);
tempPerson=null; //removes the reference
}
for (int j=0 ; j<personList.size();j++){
System.out.println(personList.get(j).name+" age is "+personList.get(j).age );
}
}
}
class Person{
String name;
int age;
}
输出
Sam age is 10
Ben age is 52
Joye age is 53
Sarah age is 15
Tim age is 12
Lucy age is 60
Jack age is 21
答案 0 :(得分:4)
你应该避免不做任何事情的陈述 - 做优化
for (int i=0;i<dName.length;i++){
Person tempPerson = new Person();
tempPerson.name= dName[i];
tempPerson.age= dAge[i];
personList.add(tempPerson);
}
setName()
代替.name =
)来代替直接设置值。 public Person setName(String aName) {
name = aName;
return this;
}
导致类似
的内容 personList.add(new Person().setName(dName[i]).setAge(dAge[i]));
然后再次 - 两个值构造函数可能是最简单的 - 并且超类没有构造函数也没关系:
public Person(String aName, int aAge) {
name = aName;
age = aAge;
}
//You can have more than one constructor
public Person() {
}
然后
personList.add(new Person(dName[i], sAge[i]));
答案 1 :(得分:3)
您应该为Person使用构造函数。然后你的for循环中只有一个调用:
personList.add(new Person(dName[i], dAge[i])
此外,在您的实施中,您正在进行两次必要的工作,因为您拨打了personList.add(new Person())
,然后拨打了personList.set(i, temPerson)
。如果你不想在你的Person类中使用构造函数,那么调用personList.add(tempPerson)
就足够了。
答案 2 :(得分:0)
不是,
你可以使用java8流,但为什么要让你的生活更难,它不会添加任何新东西