考虑这个随机对象:
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中缩短语法?
不,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 次 |
| 最近记录: |