У меня есть программа, которая использует список слов (скажем, все слова в / usr / share / dict / words). Список слов никогда не изменяется, поэтому я думаю, что я должен сделать его статическим окончательным. Но как мне сделать это окончательно? Моя текущая реализация выглядит следующим образом (я лениво загружаю список слов, когда это необходимо, хотя я не уверен, что ленивая часть необходима, так как список не такой большой или медленный для загрузки):
private static List<String> WORDS; // adding a final modifier doesn't work here
private static List<String> getWords() throws IOException {
if (WORDS == null) {
List<String> words = new LinkedList<String>();
String line;
BufferedReader br = new BufferedReader(new FileReader("my_dictionary.txt"));
while ((line = br.readLine()) != null) {
words.add(line);
}
WORDS = words;
}
return WORDS;
}
В приведенном выше коде мне не разрешено делать WORDS
final
. Любые предложения о том, как это сделать? (Действительно ли имеет значение, делаю ли я это final
или нет?)
РЕДАКТИРОВАТЬ: я думаю, один из способов сделать это с помощью следующего:
private static final List<String> WORDS = getWords();
private static List<String> getWords() throws IOException {
List<String> words = new LinkedList<String>();
String line;
try {
BufferedReader br = new BufferedReader(new FileReader("my_dictionary.txt"));
while ((line = br.readLine()) != null) {
words.add(line);
}
} catch (IOException e) {
System.out.println("Error reading dictionary: " + e);
}
return words;
}
Но это теряет ленивую часть загрузки (хотя, может быть, это не так важно, как быть final
? Может быть, я слишком стараюсь сделать что-то "книгой"?).