我需要一个带有两个构造函数的类,一个带有一个带有一个带有参数的构造函数。没有的人应该用Randomized参数调用另一个,所以不是默认的。
以下是一些示例代码:
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
才能调用第一个构造函数与它们。
有什么方法吗?
答案 0 :(得分:2)
您可以创建生成这些随机值的静态方法。然后在构造函数的第1行,您可以调用:
public Human(){
this(getRandomAge(), getRandomName());
}
答案 1 :(得分:0)
这样的事情怎么样?
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;
}
}
答案 2 :(得分:0)
不要混淆顾虑。 Human
不应该关心根据预定义的名称集选择随机名称,也不应该计算随机年龄!
我宁愿删除no-arg构造函数(除非你有一个名称和年龄的定义值,但似乎不是你的情况)并在Human
之外提取这个逻辑,通常在HumanFactory
。
答案 3 :(得分:0)
或者,您可以创建一个factory method来创建一个随机的' Human
:
public class MyProgram {
public static void main(String[] args) {
Human someRandomStranger = Human.createRandomHuman();
//...
}
}
public class Human {
public Human(int ageIn, String nameIn){
this.name = nameIn;
this.age = ageIn;
}
// ...
public static Human createRandomHuman(){
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);
return new Human(age, name);
}
}
这样可以让你的构造者清楚地知道那些不应该存在的东西。 可能会在您的代码中意外调用随机为其字段分配值的默认构造函数,并创建不需要的结果。
另一方面,正确命名的工厂方法有助于防止此类错误并明确表达您的意图。