java - 这两种创建 TreeMap(或任何地图)的方式有什么区别?
问题描述
我正在阅读项目中的一些代码,并遇到了这行代码:
private Map<String, Map<String, List<String>>> wordbatch;
在代码中,我在构造函数中到达了另一行代码:
wordbatch = new TreeMap<String, Map<String, List<String>>>;
单行代码会产生同样的效果吗?:
Map<String, Map<String, List<String>>> wordbatch = new TreeMap<String, Map<String, List<String>>>();
这行代码和上面两行代码有什么区别?
任何帮助表示赞赏,非常感谢您。试图增强我对地图的了解。
解决方案
您提出的陈述之间存在一些细微差别。
在第一种情况下,您在 X 行声明了一个实例变量(其值为null
),并且在 Y 行的代码中的某处,您给它另一个值,一个新映射。
在第二种情况下,您既要声明它又要给它一个值。但是,重要的是发生在哪里。
- 如果您将完整的声明放在原始声明所在的位置,在第 X 行,那么它仍然是一个实例变量。然而,
- 你忘了你的
private
. 如果您不希望同一包中的其他类直接使用该变量,这可能很重要。 - 如果代码的任何部分依赖于这个变量在开始时可能为 null 的事实(查找检查此变量是否为 null 的代码),那么您可能会通过在声明中对其进行初始化来引入错误。
- 你忘了你的
- 如果您将该声明放在原始赋值的位置,在 Y 行,那么您将不再声明实例变量。这成为一个局部变量。期望此实例变量存在的其余代码将产生编译错误。实例变量必须在任何方法或构造函数之外声明。
请注意,如果 Y 行在您的构造函数中,并且它是唯一的构造函数,那么这两种初始化方式几乎没有区别。
推荐阅读
- c - 为什么我在插入 ';' 之类的内容时会出现错误 还是 Plindrome 程序中的“&”?
- java - 反序列化复杂的json主体,验证其中的一个元素,然后通过它映射到另一个元素(JAVA)是否可能?
- python - Python:嵌套字典问题:尝试运行“if”命令来打印字符串
- python-3.x - 从两个组合迭代器中获取前 N 个项目?
- linux - Ubuntu lm-sensors:英特尔酷睿 i7 上的大瞬时温度跳跃
- android - Android构建apk无效的代码长度集
- python - 有没有办法从 python 中的字典中的键值对创建字符串?
- java - 使用枚举创建安全工厂实例
- npm - 通过 npm 卸载 quasar-cli 不起作用?
- asp.net-core - EF Core 3.1 如何包含拥有实体的嵌套属性