5


是否有类似的方式在 Java 中声明with 语句(如在 Javascript 中),或者是否有结构上的原因导致这不可能?


例如,这个 Javascript:

with(obj)
{
  getHomeworkAverage();
  getTestAverage();
  getAttendance();
}

...很好很容易。但是,似乎每次在 Java 中方法调用必须链接到它们的对象,没有这样优雅的快捷方式可用:

obj.getHomeworkAverage();
obj.getTestAverage();
obj.getAttendance();

这是非常多余的,尤其是在有很多方法要调用的时候更令人恼火。


  • 那么,有没有类似的方式在 Java中声明一个with 语句?
  • 如果这是不可能的,那么与在 Java 中不可能相比,在 Javascript 中可以实现的原因是什么
4

5 回答 5

10

没有“with”的直接等价物。

如果方法是实例方法,您可以给目标对象引用一个短标识符,以便在块中使用:

{
  Student s = student;
  s.getHomeworkAverage();
  s.getTestAverage();
  s.getAttendance();
}

如果方法是静态的,您可以使用“import static”:

import static java.lang.Math.*;

public class Test {
  public static void main(String[] args) {
    System.out.println(sqrt(2));
  }
}
于 2012-12-13T07:15:11.373 回答
8

不,Java 中没有with语句或类似的构造。

于 2012-12-13T06:47:18.800 回答
6

如果类obj在您的控制之下,您可以提供一个Fluent 接口,基本上this在每个函数中返回。这将让您像这样链接方法调用-

obj.getHomeworkAverage().getTestAverage().getAttendance();

于 2012-12-13T06:49:53.293 回答
4

你不能在 Java 中做到这一点是有原因的。也许最明显的是函数不是 Java 中的一等对象,因此您不能简单地使用一个名称来引用该函数——它必须在一个类之下。正如 Karthik T 所提到的,缩短它的方法可能只是创造性地使用空格:

obj
    .meth1()
    .meth2()
    .meth3()

其中每个方法都返回对象。

有关一流功能的更多信息:维基百科

于 2012-12-13T06:51:46.253 回答
1

那么,有没有类似的方式在 Java 中声明一个 with 语句?

不,那里没有。最接近的是import staticPatricia Shanahan 的回答中描述的机制。

如果这是不可能的,那么与在 Java 中不可能相比,在 Javascript 中可以实现的原因是什么?

它们是两种完全不同的语言,具有不同的特性/优势/劣势。打个比方:锤子和螺丝刀都是工具,但它们的使用方式不同。

于 2012-12-13T08:23:30.453 回答