【问题标题】:Can I specify the names of method arguments when calling it?调用时可以指定方法参数的名称吗?
【发布时间】:2015-03-19 04:58:55
【问题描述】:

如果我有方法,在 python 中

def hello(a, b):
    print a
    print b

我可以打电话给任何一个

hello('one', 'two)

hello(a='one', b='two')

我可以在 java 中做类似的事情吗?

我问的原因是因为为了进行单元测试,我正在创建一个看起来像的对象

MyObj obj = new MyObj("one", "two", 33, "xxxxxx", 44, 55, "derpity do"); 

如果我能看到每个参数与什么相关,那么阅读我的代码会容易得多。

【问题讨论】:

  • 不,你不能不去看看builder pattern
  • 谢谢!我想我也可以添加 cmets 来指定每个争论是什么。
  • 不,这是我对 Java 最大的抱怨。

标签: java


【解决方案1】:

我可以在 java 中做类似的事情吗?

不,你不能。但是,您可以使用Builder Pattern

【讨论】:

    【解决方案2】:

    不幸的是,你不能在 Java 中做到这一点。但是,您可以创建与类本身具有相同返回类型的方法,并在设置每个字段后使用return this;。使用return this; 使方法调用可链接 与其他方法调用,然后您可以将方法名称用作参数的“标签”。这对于最小化代码中的冗余非常有用,Java 中最流行的变体是 Builder 模式,它使用额外的 Builder 类作为补充来创建易于定制的类实例。您也会在其他语言中看到这种类型的东西,但通常用于其他目的,而不是花哨的构造函数(例如,像 JQuery 这样的级联 Javascript 库)。

    例如:

    class Car {
        private int year;
        private String make;
        private String model;
        private int mileage;
    
        public Car year(int year) {
            this.year = year;
            return this;
        }
        public Car make(String make) {
            this.make = make;
            return this;
        }
        public Car model(String model) {
            this.model = model;
            return this;
        }
        public Car mileage(int mileage) {
            this.mileage = mileage;
            return this;
        }
        public void drive(int miles) {
            this.mileage += miles;
        }
    }
    
    public class DriveNewCar {
        public static void main(String args[]) {
            Car myDreamCar = new Car()
                                    .year(2015)
                                    .make("Tesla")
                                    .model("Model S")
                                    .mileage(0);
            myDreamCar.drive(55);
        }
    }
    

    请注意,这不是 Builder 模式,它只是使用 return this; 和简短的方法名称使 API 客户端的内容更加清晰,所以它基本上只是花哨的设置器。

    与 Python 不同,Java 通常喜欢冗长,即使是最简单的事情也是如此。这就是为什么我强烈建议使用合适的 IDE(如 IntelliJ、Eclipse 或 Netbeans)来让您的生活更轻松。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多