java - 如何使用构造函数创建新 map ?

标签 java

我想做两件事

  1. 创建一个映射的私有(private)实例变量

  2. 在我的构造函数中创建一个空实例,该实例实现一个映射并将其分配给之前的私有(private)实例变量。

我的私有(private)实例是

private final Map<Character, SortedSet<String>> thesaurus = 
                      new HashMap <Character, SortedSet<String>>();

但是如何在构造函数中创建一个实例变量,该实例变量将在构造函数创建时引用私有(private)变量同义词库。

例如

public class Book{

    private final Map<Character, SortedSet<String>> thesaurus = 
                           new HashMap <Character, SortedSet<String>>();

public Book(){

    super();    
    /* What do i put here as an empty instance 
     * variable that implements a map and how 
     * do i assign it to thesaurus? 
     */
}

最佳答案

不清楚你在问什么,但这里有几点:

  • 您不能在构造函数中声明实例变量;您必须将其声明为该类型的成员(即作为字段)。
  • 您可以赋值到构造函数中已声明的实例变量。
  • 不必在构造函数中为实例变量赋值;你可以在声明中做到这一点。

当你这样写的时候:

public class Book{

   private final Map<Character, SortedSet<String>> thesaurus =
      new HashMap <Character, SortedSet<String>>(); 
   //...

}

然后您将thesaurus 声明为class Book 的实例变量,并将其值初始化为new HashMap .由于此字段是 final,您不能再将其值设置为任何其他值(除非基于反射的攻击)。

如果您愿意,可以将初始化移到构造函数中。即使该字段是 final(受各种明确的分配规则约束),您也可以这样做。

public class Book{

   private final Map<Character, SortedSet<String>> thesaurus;

   public class Book {
      thesaurus = new HashMap <Character, SortedSet<String>>();
   }
   //...

}

有时会做这样的事情,例如初始值的创建可能会抛出检查异常,因此需要放在 try-catch block 中。

另一种选择是在实例初始化 block 中初始化字段:

   private final Map<Character, SortedSet<String>> thesaurus;

   {
      thesaurus = new HashMap <Character, SortedSet<String>>();
   }

还有另一种选择是将所述实例初始化 block 重构为辅助方法:

   private final Map<Character, SortedSet<String>> thesaurus = emptyMap();

   private static Map<Character, Sorted<String>> emptyMap() {
      return new HashMap <Character, SortedSet<String>>();
   }

引用资料

相关问题

关于java - 如何使用构造函数创建新 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3271320/

相关文章:

java - PHP 向 Java 守护进程发送数据

java - 通过反射调用方法时包含参数

java - 简单的流程回滚问题

java - LatencyUtils 'recordLatency'方法的时间单位问题

java - 迷宫求解器循环问题 java

java - 等待多线程时的最佳实践 - 时间、计数或其他?

java - android - Google Play 商店上未显示更新按钮

java - Eclipse PDE,markerAnnotationSpecification - 不带图标定义

java - 我的动画在屏幕上移动太快(图形)(初学者)

java - 如何自定义TextView中的链接?