有 Java 编程相关的问题?

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


共 (2) 个答案

  1. # 1 楼答案

    在Java中,可以使用双括号初始化块执行类似的操作:

    Person p = new Person() {{
        firstName = "John";
        lastName = "Doe";
        address = new Address() {{
            street = "1234 St.";
            city = "Phoenix";
        }};
    }};
    

    然而,这只是在匿名内部类中使用初始化块,因此效率低于以正常方式构造对象

  2. # 2 楼答案

    事实上,有

    Person p = new Person()
    {{
        setFirstName("John");
        setLastName("Doe");
        setAddress(new Address()
        {{
            setStreet("1234 St.");
            setCity("Phoenix");
        }});
    }};
    

    甚至:

    Person p = new Person()
    {{
        firstName = "John";
        lastName = "Doe";
        address = new Address()
        {{
            street = "1234 St.";
            city = "Phoenix";
        }});
    }};
    

    这被称为双支架初始化。然而,我会避免使用这个习惯用法,因为它有一些意想不到的副作用,例如,这个语法实际上创建了一个匿名的内部类Person$1Address$

    另见