Java相当于VB With ... End With

时间:2011-02-12 02:12:39

标签: java

  

可能重复:
  WITH statement in Java

在Visual Basic中,我可以这样做:

With myObject
    .myMethod1()
    .myMethod2()
    .myMethod3()
End With

我想知道Java中是否存在等效的内容?

4 个答案:

答案 0 :(得分:2)

不是真的。如果你需要对一个对象做一堆操作,那么将它们封装在一个函数中并将它放在该对象的类中会更有意义。

public void doStuff() {
    myMethod1();
    myMethod2();
    myMethod3();
}

...

myObject.doStuff();

您可能还想查看之前发布的此问题: WITH statement in Java

答案 1 :(得分:2)

您可以通过使用额外的大括号包装代码来initialize一个对象。

Test myObject;

myObject=new Test()
{
  {
    myMethod1();
    myMethod2();
    myMethod3();
   }
};

答案 2 :(得分:1)

不是,但你可以做类似

的事情
{
  MyClass m = reallyLongExpressionReturningAnObject();
  m.myMethod1();
  m.myMethod2();
  m.myMethod3();
}

我不知道Visual Basic,但是某些语言具有类似语法的功能除了保存更多次输入表达式之外还有一个额外的优点:它会自动关闭块末尾的对象,即使是块中发生了一些异常。

有一些关于将它添加到Java的讨论,看起来像it is accepted在JDK 7中。但是,语法会有点不同,作为try语句的扩展。然后你可以写

try (BufferedReader in = new BufferedReader(new FileReader(...))) {
    String line;
    while((line = in.readLine()) != null) {
       list.add(line);
    }
}

...阅读器(或异常)将自动关闭阅读器(及其包裹的所有流)。

这适用于实现(新)java.lang.AutoClosable接口的所有对象。如果块本身抛出异常,并且在清理期间发生另一个异常,则会抑制此另一个异常并将其附加到addSuppressed(...)的原始异常。

但是你仍然需要通过块内的(变量)名称来调用对象。

答案 3 :(得分:1)

没有与with语句完全等效的内容。在VB上下文中,它是语法糖。你可以创建一个临时引用,你想要用“with”做什么。

此外,语法是

With myObject
    .myMethod1()
    .myMethod2()
    .myMethod3()
End With

可能相当于

... m = myObject; 
m.myMethod1(); 
...