У меня есть класс, который я использую в качестве таблицы. Этот класс получил массив из 16 классов строк. Эти классы строк имеют 6 двойных переменных. Значения этих строк устанавливаются один раз и никогда не изменяются.Создать класс таблицы как singleton
Было бы хорошей практикой сделать этот стол одним сингл? Преимущество заключается в том, что он дешевле памяти, но таблица будет вызываться из нескольких потоков, поэтому мне нужно синхронизировать мой код, который вызывает более медленное приложение. Однако поиск в этой таблице, вероятно, является очень небольшой частью общего кода, который выполняется.
EDIT: Это мой код, есть ли лучшие способы сделать это или это хорошая практика? Удалено синхронизированное ключевое слово в соответствии с рекомендациями в этом вопросе.
final class HalfTimeTable {
private HalfTimeRow[] table = new HalfTimeRow[16];
private static final HalfTimeTable instance = new HalfTimeTable();
private HalfTimeTable() {
if (instance != null) {
throw new IllegalStateException("Already instantiated");
}
table[0] = new HalfTimeRow(4.0, 1.2599, 0.5050, 1.5, 1.7435, 0.1911);
table[1] = new HalfTimeRow(8.0, 1.0000, 0.6514, 3.0, 1.3838, 0.4295);
//etc
}
@Override
@Deprecated
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
public static HalfTimeTable getInstance() {
return instance;
}
public HalfTimeRow getRow(int rownumber) {
return table[rownumber];
}
}
Немного не по теме, но вам не нужно переопределять 'clone', если ваш класс явно не реализует интерфейс' Cloneable'. Кроме того, 'getInstance', вероятно, должен быть статическим :) –
Я не знал о клоне. Я где-то читал, что вы должны переопределить его, чтобы избежать клонирования одиночек. Конечно, мой getInstance был статичным. Удалил его в вопросе случайно. –