首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java构造函数中使用if else语句

如何在java构造函数中使用if else语句
EN

Stack Overflow用户
提问于 2021-11-21 07:17:26
回答 4查看 69关注 0票数 0

我正在尝试重载java中的构造函数。在它的变量中有两个字符串,如果我在只调用其中一个字符串的情况下编写两个单独的构造函数,这是有问题的。这就是我想要使用以下代码的原因:

代码语言:javascript
复制
public Timbre(String string){
    if(string.indexOf("-") == -1){
        this, ANNEE_COURANTE, string, VALEUR_TIMBRE_DEFAUT);
    } else{
        this(string, ANNEE_COURANTE, PAYS_DEFAUT, VALEUR_TIMBRE_DEFAUT);
    }
}

然而,VSC告诉我“构造函数调用必须是构造函数中的第一个语句”。我该如何克服这个问题呢?

EN

回答 4

Stack Overflow用户

发布于 2021-11-21 07:57:49

为此,您应该使用Factory Design Pattern,在您的情况下,甚至可以像这样实现:

代码语言:javascript
复制
class Timbre{
    // various constructors - all private!

    // static factory method 
    public static Timbre of(String string){
        if(string.indexOf("-") == -1){
            return new Timbre(ANNEE_COURANTE, string, VALEUR_TIMBRE_DEFAUT);
        } else{
            return new Timbre(string, ANNEE_COURANTE, PAYS_DEFAUT, VALEUR_TIMBRE_DEFAUT);
        }
    }
}

阅读有关工厂设计模式的更多信息:

票数 3
EN

Stack Overflow用户

发布于 2021-11-21 07:50:49

在构造函数链接中,不能使用if / else在不同的this(...)super(...)调用之间进行选择。这在Java中是不允许的。thissuper调用必须在编译时解析为单个构造函数重载。

(AFAIK)在构造函数链中做“有条件的事情”的唯一方法是这样的:

代码语言:javascript
复制
public MyClass(...)
    this(boolean_expression ? yes_expression : no_expression, ...);
    ...
}

在这两种情况下,我们都链接到相同的构造函数重载,但在"yes“和"no”情况下使用不同的参数值。

票数 2
EN

Stack Overflow用户

发布于 2021-11-21 07:58:15

Java要求对this()的调用是构造函数中的第一个语句。您可以使用三元表达式来获得与if ... else ...相同的效果。但是,您需要为两个路径调用相同的构造函数。

您可以尝试如下所示:

代码语言:javascript
复制
public Timbre(String string) {
  this(
    ANNEE_COURANTE,
    (string.indexOf("-") == -1) ? PAYS_DEFAUT : string,
    VALEUR_TIMBRE_DEFAUT
  );
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70052591

复制
相关文章

相似问题

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