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

Ple*_*rds 2 java delphi

考虑这个随机对象:

Object Test of Class TestClass:
  String Name;
  Integer Age;
  procedure setName(n);
  function getName(): String;
Run Code Online (Sandbox Code Playgroud)

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

Test.Name = 'EASI';
Test.Age = 34;
Test.setName('Eduardo Alcantara');
ShowMessage(Test.getName);
Run Code Online (Sandbox Code Playgroud)

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

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

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

use*_*740 7

不,Java中没有类似的构造.


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

Person person = new Person()
  .setName("Eduardo Alcântara")
  .setAge(32);
showMessage(person.getName());
Run Code Online (Sandbox Code Playgroud)

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

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


有时使用的另一种方法是Double Brace Initialization - 这只适用于new语句的上下文,它会创建一个新的匿名内部类.

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

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

也可以看看:


归档时间:

查看次数:

1006 次

最近记录:

11 年,6 月 前