首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造函数使用参数调用构造函数

构造函数使用参数调用构造函数
EN

Stack Overflow用户
提问于 2016-11-11 21:38:27
回答 4查看 138关注 0票数 0

我需要一个有两个构造器的类,一个有参数,一个没有参数。不带参数的函数应该用随机化的参数调用另一个函数,所以不是默认的参数。

下面是一些示例代码:

代码语言:javascript
复制
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()必须在构造函数的开头,但我必须先定义并弄清楚nameage,然后才能用它们调用第一个构造函数。

有什么办法可以解决这个问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-11 21:50:41

您可以创建静态方法,使这些值成为随机值。然后,在构造函数的第1行,您可以调用:

代码语言:javascript
复制
public Human(){
    this(getRandomAge(), getRandomName());
}
票数 2
EN

Stack Overflow用户

发布于 2016-11-11 21:42:45

这样怎么样?

代码语言:javascript
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-11-11 22:07:50

不要混为一谈。Human不应该关心根据预定义的名称集选择随机名称,也不应该计算随机年龄!

我宁愿删除no-arg构造函数(除非您为name和age定义了一个值,但这似乎不是您的情况),并在Human之外提取此逻辑,通常是在HumanFactory中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40549194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档