Я желаю сделать две вещи
Создайте частную переменную экземпляра, которая является картой
Создать пустой экземпляр в моем конструкторе, который реализует карту и присваивает ее предыдущей частной переменной экземпляра.
Частный экземпляр, который я имею,
private final Map<Character, SortedSet<String>> thesaurus =
new HashMap <Character, SortedSet<String>>();
но как создал бы переменную экземпляра в конструкторе, который сошлется на тезаурус частной переменной после создания конструкторов.
Например,
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
переменной экземпляра класса Book
, а также инициализировали ее значение как new HashMap
. Поскольку это поле является конечным
, вы больше не можете установить его значением что-либо другое (за исключением атак на основе отражения).
Вы можете, если захотите, перенести инициализацию в конструктор. Это можно сделать, даже если поле является final
(с учетом различных определенных правил присваивания).
public class Book{
private final Map<Character, SortedSet<String>> thesaurus;
public class Book {
thesaurus = new HashMap <Character, SortedSet<String>>();
}
//...
}
Нечто подобное иногда делается, когда, например, создание начального значения может вызвать проверяемое исключение и поэтому должно быть помещено в блок try-catch
.
Другой вариант - инициализировать поля в блоке инициализатора экземпляра:
private final Map<Character, SortedSet<String>> thesaurus;
{
thesaurus = new HashMap <Character, SortedSet<String>>();
}
И еще один вариант - рефакторить блок инициализатора экземпляра в вспомогательный метод:
private final Map<Character, SortedSet<String>> thesaurus = emptyMap();
private static Map<Character, Sorted<String>> emptyMap() {
return new HashMap <Character, SortedSet<String>>();
}
Вы уже инициализируете переменную тезауруса картой. Вы можете переместить его в конструктор, например:
public class Book
{
private final Map<Character, SortedSet<String>> thesaurus;
public Book(){
this.thesaurus = new HashMap <Character, SortedSet<String>>();
}
}
Однако менять не нужно. В любом случае поле экземпляра будет инициализироваться каждый раз при создании экземпляра. Также обратите внимание, что здесь вам не нужен super ()
, поскольку он неявный.