将参数传递给构造函数,替代语法

时间:2012-09-08 12:00:14

标签: java oop constructor arguments

在学习Java的基础知识时,我记得遇到过将参数传递给类构造函数的特定语法。我发现这个语法是额外可读的,但我很遗憾无法再找到它了。它看起来有点像:

// Creating an instance of the Employee class (has property name, salary, etc)
Employee fred = new Employee({
    name: "Fred",
    salary: 5000
    job: Jobs.PROGRAMMER
});

正如您可能已经看到的那样,构造函数的每个参数意味着什么变得非常清楚,这消除了查看文档的需要 - 只是为了理解简单的代码。

我是在混合使用语言还是存在类似这样的语法?最后可以链接到手册。

3 个答案:

答案 0 :(得分:2)

您可能会想到类似于以下代码的内容:

SomeClass foo = new SomeClass(/* args */) {
  {
    protectedOrPublicField = someValue;
    protectedOrPublicMethod(/*args*/);
  }
}

这构造了一个对象并同时调用方法。它被称为double brace initialization。这不是你要求的,但它是我所知道的Java语言中唯一熟悉的语法。

请注意,您可以使用它来设置protected或public字段的值。那看起来与你的例子非常相似。

如果您希望构造函数更具可读性,请考虑使用自我描述的static factory methodbuilder pattern。有关详细信息,请参阅Joshua Bloch优秀的 Effective Java 2nd Edition 或咨询您最喜爱的搜索引擎。

答案 1 :(得分:2)

这不是Java语法(从来没有)。

你可以做的是实现类似的东西就是使用带有这样的初始化器的匿名类

class Employee{
    String first;
    String last;
}

Employee mike = new Employee(){{
    first = "Mike";
    last  = "Meyers";
}};

这里有一个解释:http://blog.schauderhaft.de/2012/08/19/named-parameters-in-java-another-alternative/

答案 2 :(得分:0)

是的,您正在混合使用C#named and optional arguments的新功能。但是,如果你创建像@Duncan这样的东西,琼斯说这是一个完全相同的匿名类。但是,根据Java Specification 15.9.1

An anonymous class cannot have an explicitly declared constructor.