我想做两件事
创建一个私有实例变量,它是一个映射
在我的构造函数中创建一个空实例,它实现了一个地图并将其分配给前一个私有实例变量.
我拥有的私有实例是
private final Map<Character, SortedSet<String>> thesaurus =
new HashMap <Character, SortedSet<String>>();
Run Code Online (Sandbox Code Playgroud)
但是如何在构造函数中创建一个实例变量,该变量将在构造函数创建时引用私有变量同义词库.
例如
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?
*/
}
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚你在问什么,但这里有一些观点:
当你写这样的东西:
public class Book{
private final Map<Character, SortedSet<String>> thesaurus =
new HashMap <Character, SortedSet<String>>();
//...
}
Run Code Online (Sandbox Code Playgroud)
然后你声明thesaurus是一个实例变量class Book,你也将它的值初始化为a new HashMap.由于此字段是final,您不能再将其值设置为其他任何值(禁止基于反射的攻击).
如果您愿意,可以将初始化移动到构造函数中.即使字段是final(根据各种明确的分配规则),您也可以这样做.
public class Book{
private final Map<Character, SortedSet<String>> thesaurus;
public class Book {
thesaurus = new HashMap <Character, SortedSet<String>>();
}
//...
}
Run Code Online (Sandbox Code Playgroud)
有时这样的事情是在例如创建初始值时可能抛出一个已检查的异常,因此需要放在一个try-catch块中.
另一个选项是初始化实例初始化程序块中的字段:
private final Map<Character, SortedSet<String>> thesaurus;
{
thesaurus = new HashMap <Character, SortedSet<String>>();
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是将所述实例初始化程序块重构为辅助方法:
private final Map<Character, SortedSet<String>> thesaurus = emptyMap();
private static Map<Character, Sorted<String>> emptyMap() {
return new HashMap <Character, SortedSet<String>>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36604 次 |
| 最近记录: |