有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

考虑这个随机对象:

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) 个答案

  1. # 1 楼答案

    不,Java中没有类似的构造


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

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

    然而,这并不总是适用/合适的,需要类型本身的支持——主要是从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());
    

    另见: