我遇到了一些具有以下结构的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是否支持这种语法?这两步语法是可取的,有什么原因吗?
有六个或更好的问题,例如,最终,你会发现静态工厂模式。。。请参见加密API。排序很难解释,但可以这样想:如果您有构造函数,默认值或其他值,那么传播状态超出大括号的唯一方法是使用Boolean isValid;(以及null作为默认值v失败的构造函数)或抛出一个异常,当从字段用户处获取该异常时,该异常永远不会提供信息。
代码正确,该死,我写了一千行构造函数,做了我需要的。我发现在对象构造中使用isValid——换句话说,两行构造函数——但出于某种原因,我正在迁移到静态工厂模式。我只是觉得如果在方法调用中仍然存在sync()问题,那么可以做很多事情,但默认值可以更好地“替换”(更安全)
我认为我们需要做的是解决空值作为默认值相对于字符串一=新字符串(“”)的问题;作为成员变量,然后在将字符串分配给构造函数之前检查null。
在Java中完成了大量原始的、同温层的计算机科学。
C++等等都有供应商库,是的。由于Java是一个庞大的工具箱,所以它可以在大型服务器上超越它们。研究静态初始化程序块,和我们呆在一起。
没有,但最简单的实现方法是:
public myParameterizedFunction(String param1, int param2, Boolean param3) {
param3 = param3 == null ? false : param3;
}
public myParameterizedFunction(String param1, int param2) {
this(param1, param2, false);
}
或代替三元运算符,可以使用以下条件:
public myParameterizedFunction(String param1, int param2, Boolean param3) {
if (param3 == null) {
param3 = false;
}
}
public myParameterizedFunction(String param1, int param2) {
this(param1, param2, false);
}
我就是这样做的。。。这可能不如对定义的参数使用“可选参数”方便,但它可以完成任务:
public void postUserMessage(String s,boolean wipeClean)
{
if(wipeClean)
{
userInformation.setText(s + "\n");
}
else
{
postUserMessage(s);
}
}
public void postUserMessage(String s)
{
userInformation.appendText(s + "\n");
}
注意,我可以只使用字符串调用同一个方法名,也可以使用字符串和布尔值调用它。在这种情况下,将wipeClean设置为true将用提供的字符串替换TextArea中的所有文本。将wipeClean设置为false或将其全部忽略,只需将提供的文本附加到TextArea。
另外请注意,我并没有重复这两个方法中的代码,我只是添加了一个功能,即通过创建一个同名的新方法(仅使用添加的布尔值)来重置TextArea。
实际上,我认为这比Java为我们的参数提供“可选参数”要简单一些,因为我们需要为默认值等进行编码。在本例中,我不需要担心这些问题。是的,我在课堂上增加了另一种方法,但从长远来看,我个人认为这更容易阅读。