Kri*_*ket 18 java default-parameters
我一直在四处寻找,试图找出不包括Java中函数的默认参数的原因.
我知道可以使用varargs模拟行为,或者通过创建几个接受较少参数的重载函数来模拟行为,并调用接受所有参数的实际函数.但是,这些选项都不符合C++语法的清晰度和易用性.
有谁知道是否有一个可靠的技术原因会产生类似的东西
void myFunc(int a=1, int b=2) {...}
Run Code Online (Sandbox Code Playgroud)
在新版Java中不受欢迎或无法撤销?
它不在 Java 的初始版本中,因为他们决定不需要它,可能是为了让事情变得简单。
现在添加它会很棘手,因为它需要以向后兼容的方式完成。在 Java5 中添加可变参数、自动装箱和泛型是一项重大任务,而且只能通过有限的功能(例如类型擦除)来完成,并且以增加复杂性为代价(新的方法解析规则适合考试技巧问题)。
最好的选择是在 JVM 上使用非 Java 语言。也许其中之一已经有了这个。
小智 3
我不知道技术上的原因,除了它是复杂的哪些值被忽略而哪些不是.
例如,在您的示例中,如果只传递了一个整数,那么它应该是默认值a还是b应该是默认值?最有可能a但它确实增加了这种模糊性.
一个简单的解决方案是
void myFunc(Integer a, Integer b) {
if (a == null) a = 1;
if (b == null) b = 2;
}
Run Code Online (Sandbox Code Playgroud)
是的,它更长时间,并且它隐藏了代码中的默认值,而不是方法签名(可以在JavaDoc中显示),但它确实强制执行一致性.