我正在尝试重载java中的构造函数。在它的变量中有两个字符串,如果我在只调用其中一个字符串的情况下编写两个单独的构造函数,这是有问题的。这就是我想要使用以下代码的原因:
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告诉我“构造函数调用必须是构造函数中的第一个语句”。我该如何克服这个问题呢?
发布于 2021-11-21 07:57:49
为此,您应该使用Factory Design Pattern,在您的情况下,甚至可以像这样实现:
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);
}
}
}阅读有关工厂设计模式的更多信息:
发布于 2021-11-21 07:50:49
在构造函数链接中,不能使用if / else在不同的this(...)或super(...)调用之间进行选择。这在Java中是不允许的。this或super调用必须在编译时解析为单个构造函数重载。
(AFAIK)在构造函数链中做“有条件的事情”的唯一方法是这样的:
public MyClass(...)
this(boolean_expression ? yes_expression : no_expression, ...);
...
}在这两种情况下,我们都链接到相同的构造函数重载,但在"yes“和"no”情况下使用不同的参数值。
发布于 2021-11-21 07:58:15
Java要求对this()的调用是构造函数中的第一个语句。您可以使用三元表达式来获得与if ... else ...相同的效果。但是,您需要为两个路径调用相同的构造函数。
您可以尝试如下所示:
public Timbre(String string) {
this(
ANNEE_COURANTE,
(string.indexOf("-") == -1) ? PAYS_DEFAUT : string,
VALEUR_TIMBRE_DEFAUT
);
}https://stackoverflow.com/questions/70052591
复制相似问题