【问题标题】:java - call a void method then pass the object on one linejava - 调用 void 方法,然后在一行上传递对象
【发布时间】:2014-01-19 18:36:05
【问题描述】:

这是我想知道很久的事情。

是否可以传递一个对象但首先在同一行中对该对象调用一个 void 方法?这很难解释,但我举个例子:

我正在使用来自第三方 API 的 Vector 对象,它只包含 3 个坐标,我将它传递给一个组成的 setLocation(Vector) 方法;但首先我想将 3 添加到由 Vector#addY(3f); 完成的 Vector 的 Y 值,那么是否可以在同一行上执行此操作?

setLocation(new Vector(0f,4f,0f).addY(3));

我认为这应该可以解释我的意思。

【问题讨论】:

  • 不,除非addY 方法返回一个新的Vector 对象,这不是你的情况
  • System.out.println(new ArrayList().add("5"));打印 true 因为 add 返回布尔值。所以,只有当整个方法链返回您的对象时,您才能调用方法,否则,这没有任何意义..
  • 一个单独的问题是您为什么要这样做?将多个操作推送到一行是降低代码清晰度的最佳方法
  • 好的,谢谢!我只是想知道这是否可能。
  • 这种设置就是所谓的“流利的 API”。不幸的是,该 setter 中的 JavaBeans 标准返回 void 而不是 this,所以您通常不能。

标签: java methods void


【解决方案1】:

如果您可以将 addY() 更改为“return this”,那么您就成功了。

既然是第三方 API,也许你只需要一个辅助函数:

Vector makeAndSetupVector(float f1, float f2, float f3, int y) {
   Vector vect = new Vector(f1, f2, f3);
   vect.addY(y);

   return vect;
}

现在你可以这样做了:

setLocation(makeAndSetupVector(0f, 4f, 0f, 3));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多