在方法调用中写入参数名称

时间:2015-11-11 14:20:45

标签: java

我想在调用方法时写下参数方法的名称,而不仅仅是给出参数本身。例如:

public exampleMethod(boolean xWasDone) {}

调用它的已知方法是:

exampleMethod(true);

有没有办法通过显式命名参数来调用它?像这样的东西?:

exampleMethod(xWasDone: true);

我认为后者更具可读性,因此对正确编写我的调用方式感兴趣。

7 个答案:

答案 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

快乐狩猎。

如果需要任何更正,请更新我。