我想在调用方法时写下参数方法的名称,而不仅仅是给出参数本身。例如:
public exampleMethod(boolean xWasDone) {}
调用它的已知方法是:
exampleMethod(true);
有没有办法通过显式命名参数来调用它?像这样的东西?:
exampleMethod(xWasDone: true);
我认为后者更具可读性,因此对正确编写我的调用方式感兴趣。
答案 0 :(得分:13)
这种语法在Java中支持不。
可以说,不需要它,因为函数签名中的参数顺序在Java中强制执行。
此外,您应该注意Java中支持函数overloading
,其中多个函数可能具有相同的名称但参数的数量不同。这意味着您不能省略任何指定的输入,以避免无意中调用另一个重载函数。
答案 1 :(得分:5)
我也有这个问题与布尔。您提出的语法在Java中是不可能的,但Java允许类似的东西。您可以切换到enum
s
定义枚举
enum Status { DONE, TODO };
在您的方法中使用它
public exampleMethod(Status status)
{
if (status == DONE) ...
}
在您的方法调用中
exampleMethod(Status.DONE);
除了可读性的明显增加之外,这还允许更容易的重构和可扩展性,例如,如果需要另一个状态。
答案 2 :(得分:5)
如果它真的只是关于readablitiy你可以像这样编写方法调用:
someMethod(/*param1*/ true, /*param2*/ 133.7, /*param3*/ "foobar");
但它确实不应该是必要的!示例:您有此方法
public void setPersonData(String gender, int age, String name) {
...
}
你可以这样调用这个方法:
String str1 = "male";
int int1 = 56;
String str2 = "Rudolf";
setPersonData(str1, int1, str2);
在这种情况下你是对的,它不是很可读!但如果你这样写:
String gender = "male";
int age = 56;
String name = "Rudolf";
setPersonData(gender, age, name);
您的可读性不会有任何问题!
答案 3 :(得分:3)
这在Java中可能不。但是,您可以在其他位置定义和初始化参数,然后使用此参数调用它。但如果背后没有商业逻辑,我就不会这样做。
答案 4 :(得分:2)
如果您关心可读性,请考虑使用以下方法之一:
定义一个您将使用的布尔变量:
boolean wasDone = true;
exampleMethod(wasDone);
定义一个您将使用的常量:
private static boolean WAS_DONE= true;
...
exampleMethod(WAS_DONE);
避免使用布尔参数,而是使用enum:
exampleMethod(Status.WAS_DONE);
答案 5 :(得分:1)
Java不支持命名参数,这是您正在寻找的内容。
但是,您可以针对命名参数的优雅惯用方法进行编程,如本文所述 Named Parameter idiom in Java
在Java8中,您可以访问方法'这样的参数 named_parameters_in_java_8;但这远非你实际想要实现的目标,对吧?
答案 6 :(得分:0)
这可能是一个较晚的答复,但我今天遇到了类似的情况,并希望让新读者对此进行探讨。
尽管 java不不支持此功能,但我确实相信这可以提高代码的可读性。如果您真的对使用此工具感兴趣,可以浏览 IntelliJ IDE,该IDE默认情况下支持此功能。
Eclipse 关于引入此功能的讨论:https://bugs.eclipse.org/bugs/show_bug.cgi?id=529011
我知道的链接:https://youtu.be/yVzi3wuTUE4?t=946
快乐狩猎。
如果需要任何更正,请更新我。