我需要一个有两个构造器的类,一个有参数,一个没有参数。不带参数的函数应该用随机化的参数调用另一个函数,所以不是默认的参数。
下面是一些示例代码:
public Human(int ageIn, String nameIn){
this.name = nameIn;
this.age = ageIn;
}
public Human(){
String[] names = {"Peter", "Olof", "Alva", "Sanna", "Carl", "Illona"};
double random = Math.random();
int nameIndex = (int)(names.length*random+0.5);
String name = names[nameIndex];
random = Math.random();
int age = (int)(100*random+0.5);
this(age, name);
}让这件事变得困难的是,this()必须在构造函数的开头,但我必须先定义并弄清楚name和age,然后才能用它们调用第一个构造函数。
有什么办法可以解决这个问题吗?
发布于 2016-11-11 21:50:41
您可以创建静态方法,使这些值成为随机值。然后,在构造函数的第1行,您可以调用:
public Human(){
this(getRandomAge(), getRandomName());
}发布于 2016-11-11 21:42:45
这样怎么样?
public class Human {
public Human() {
this(null, -1);
}
public Human(String name, int age) {
if(name == null) {
name = //your random name generation code
}
if(age == -1) {
age = //your random age generation code
}
this.name = name;
this.age = age;
}
}发布于 2016-11-11 22:07:50
不要混为一谈。Human不应该关心根据预定义的名称集选择随机名称,也不应该计算随机年龄!
我宁愿删除no-arg构造函数(除非您为name和age定义了一个值,但这似乎不是您的情况),并在Human之外提取此逻辑,通常是在HumanFactory中。
https://stackoverflow.com/questions/40549194
复制相似问题