是否有Delphi的“with..do”Java等价物?

时间:2014-06-07 01:19:17

标签: java delphi

考虑这个随机对象:

Object Test of Class TestClass:
  String Name;
  Integer Age;
  procedure setName(n);
  function getName(): String;

Delphi 中如果我们想要轻松使用对象的许多属性和方法,我们可以这样做:

Test.Name = 'EASI';
Test.Age = 34;
Test.setName('Eduardo Alcantara');
ShowMessage(Test.getName);

......或者我们可以这样做:

with Test do
begin
  Name = 'EASI';
  Age = 32;
  setName('Eduardo Alcântara');
  ShowMessage(getName);
end

Java中是否有类似的结构,我们可以在Delphi中缩短语法?

1 个答案:

答案 0 :(得分:7)

不,Java中有 no 类似的构造。


一个Java习惯用法是使用可链接/构建器式模式:

Person person = new Person()
  .setName("Eduardo Alcântara")
  .setAge(32);
showMessage(person.getName());

然而,这并不总是适用/适当的,并且需要类型本身的支持 - 主要是从setter方法返回接收器对象(即this)。

请注意,对原始接收器/变量调用getName方法以避免在showMessage调用中掩盖副作用,并且上例中的每个Person方法仍然具有显式接收器(这就是“做...用“构造可以避免”。


有时使用的另一种方法是Double Brace Initialization - 此new语句的上下文中工作,并创建一个新的匿名内部类。

优于上述模式的优点是不需要修改setter方法;但是,Person对象的隐式接收器仅存在于双括号内。

Person person = new Person() {{
   setName("Eduardo Alcântara");
   setAge(32);
}};
showMessage(person.getName());

另见: