Java是否与Javascript with statement相当?

时间:2012-12-13 06:43:44

标签: java javascript with-statement


是否有类似的方法在Java中声明 with-statement (如在Javascript中),或者是否存在结构性原因导致这种情况无法实现?

<小时/> 例如,这个Javascript:

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

......很好,也很容易。但是,似乎方法调用链接到Java中每个时间的对象,没有这样优雅的快捷方式:

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

这是非常多余的,当有许多方法可以调用时尤其令人恼火。

<小时/>

  • 那么,有没有类似的方法在Java中声明 with-statement
  • 如果可能,那么在Javascript中 可能与 在Java中可能的原因是什么?< / LI>

5 个答案:

答案 0 :(得分:9)

没有直接相当于“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));
  }
}

答案 1 :(得分:7)

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

答案 2 :(得分:5)

如果obj的班级在您的控制之下,您可以提供Fluent interface,基本上每个函数都会返回this。这可以让你像这样链接方法调用 -

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

答案 3 :(得分:4)

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

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

其中每个方法返回对象。

有关头等功能的更多信息:wikipedia

答案 4 :(得分:1)

  

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

不,没有。最接近的是Patricia Shanahan回答中描述的import static机制。

  

如果这是不可能的,那么在Javascript中可能的原因与Java中不可能的原因相同?

它们是两种完全不同的语言,具有不同的特征/优点/缺点。类比:锤子和螺丝刀都是工具,但它们以不同的方式使用。