Java中的块语句
我有一个扩展java.util.HashMap的类MyMap,下面的代码作为一个语句块工作,但我不理解额外大括号的用法Java中的块语句,java,block,Java,Block,我有一个扩展java.util.HashMap的类MyMap,下面的代码作为一个语句块工作,但我不理解额外大括号的用法 MyMap m = new MyMap() { { put("some key", "some value"); } }; 现在为什么我需要额外的花括号,我不能这样做(但这会引发编译错误) 这: 创建一个,它是HashMap的子类 这: 这是一个很好的例子。在创建匿名子类的实例时执行代码。您在这里实际做的是定义MyMap的任意子类,这可能不是您的意图。。。
MyMap m = new MyMap() {
{
put("some key", "some value");
}
};
现在为什么我需要额外的花括号,我不能这样做(但这会引发编译错误)
这:
创建一个,它是HashMap
的子类
这:
这是一个很好的例子。在创建匿名子类的实例时执行代码。您在这里实际做的是定义MyMap的任意子类,这可能不是您的意图。。。最外面的大括号围绕着类内容。在Java中,不能将指令直接放在类块中:如果需要在实例化类时执行代码,可以将其放入构造函数中。这就是最里面的大括号的作用:它们为匿名类定义了一个初始值设定项 现在,你可能想要这样的东西:
MyMap m = new MyMap();
m.put("some key", "some value");
只需创建一个
MyMap
实例并调用put
,不涉及匿名类。它被称为“双括号初始化”。现在,您有了新的搜索关键字。相关:,而且这是一个肮脏的黑客行为,在我看来应该被禁止,在它后面加上一个初始值设定项(只需要一个;
,并在所有这些方法前面加上var的名称,也许在它后面加上一个static
),这样做不会创建一个匿名子类,“这可能不是你的本意”。。。实际上,有些人认为这种结构是惯用的。不过对我来说似乎有些过分了。
MyMap m = new MyMap() {
....
};
{
put("some key", "some value");
}
MyMap m = new MyMap();
m.put("some key", "some value");