我遇到了一些具有以下结构的Java代码:

public MyParameterizedFunction(String param1, int param2)
{
    this(param1, param2, false);
}

public MyParameterizedFunction(String param1, int param2, boolean param3)
{
    //use all three parameters here
}

我知道,在C++中,我可以为参数指定默认值。例如:

void MyParameterizedFunction(String param1, int param2, bool param3=false);

Java是否支持这种语法?这两步语法是可取的,有什么原因吗?


当前回答

没有,但您可以使用生成器模式,如堆栈溢出答案中所述。

如链接答案中所述,生成器模式允许您编写如下代码

Student s1 = new StudentBuilder().name("Eli").buildStudent();
Student s2 = new StudentBuilder()
                 .name("Spicoli")
                 .age(16)
                 .motto("Aloha, Mr Hand")
                 .buildStudent();

其中某些字段可以具有默认值或可选。

其他回答

不,但我们有另一种形式的函数重载。

未传递参数时调用

void operation(){

int a = 0;
int b = 0;

} 

在传递“a”参数时调用

void operation(int a){

int b = 0;
//code

} 

在传递参数b时调用

void operation(int a , int b){
//code
} 

有六个或更好的问题,例如,最终,你会发现静态工厂模式。。。请参见加密API。排序很难解释,但可以这样想:如果您有构造函数,默认值或其他值,那么传播状态超出大括号的唯一方法是使用Boolean isValid;(以及null作为默认值v失败的构造函数)或抛出一个异常,当从字段用户处获取该异常时,该异常永远不会提供信息。

代码正确,该死,我写了一千行构造函数,做了我需要的。我发现在对象构造中使用isValid——换句话说,两行构造函数——但出于某种原因,我正在迁移到静态工厂模式。我只是觉得如果在方法调用中仍然存在sync()问题,那么可以做很多事情,但默认值可以更好地“替换”(更安全)

我认为我们需要做的是解决空值作为默认值相对于字符串一=新字符串(“”)的问题;作为成员变量,然后在将字符串分配给构造函数之前检查null。

在Java中完成了大量原始的、同温层的计算机科学。

C++等等都有供应商库,是的。由于Java是一个庞大的工具箱,所以它可以在大型服务器上超越它们。研究静态初始化程序块,和我们呆在一起。

没有,但您可以使用生成器模式,如堆栈溢出答案中所述。

如链接答案中所述,生成器模式允许您编写如下代码

Student s1 = new StudentBuilder().name("Eli").buildStudent();
Student s2 = new StudentBuilder()
                 .name("Spicoli")
                 .age(16)
                 .motto("Aloha, Mr Hand")
                 .buildStudent();

其中某些字段可以具有默认值或可选。

不。一般来说,Java没有太多(任何)语法糖,因为他们试图制作一种简单的语言。

正如Scala提到的,Kotlin也值得一提。在Kotlin函数中,参数也可以具有默认值,甚至可以引用其他参数:

fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {
    ...
}

与Scala一样,Kotlin在JVM上运行,可以很容易地集成到现有的Java项目中。