在学习Java的基础知识时,我记得遇到了将参数传递给类构造函数的特定语法。我发现这个语法是额外可读的,但遗憾的是我再也找不到它了。它看起来有点像以下几个方面:
// Creating an instance of the Employee class (has property name, salary, etc)
Employee fred = new Employee({
name: "Fred",
salary: 5000
job: Jobs.PROGRAMMER
});
正如您可能看到的,构造函数的每个参数意味着什么,这就非常清楚了,这就不需要查看文档了--只是为了理解简单的代码。
,我是混合了语言,还是存在类似于的语法?如能最终链接到手册,将不胜感激。
发布于 2012-09-08 12:13:08
这不是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/
发布于 2012-09-08 12:07:42
您可能会想到类似于以下代码的内容:
SomeClass foo = new SomeClass(/* args */) {
{
protectedOrPublicField = someValue;
protectedOrPublicMethod(/*args*/);
}
}
这将构造一个对象并同时调用方法。它被称为双支撑初始化。这并不完全是您所要求的,但它是我在Java中所知道的最熟悉的语法。
请注意,您可以使用它来设置受保护或公共字段的值。这看起来与您的示例非常相似。
如果希望您的构造函数更具可读性,可以考虑使用自描述的静态工厂法或建造者模式。有关更多细节,请参阅约书亚·布洛赫出色的有效Java第二版,或者咨询你最喜欢的搜索引擎。
发布于 2012-09-08 12:18:25
是的,你混合了C# 命名和可选参数的一个新特性。然而,如果你创建类似@Duncan所说的东西,那是完全相同的匿名类。然而,根据Java规范15.9.1的说法
An anonymous class cannot have an explicitly declared constructor.
https://stackoverflow.com/questions/12330554
复制相似问题