Я не уверен, что это правильный способ уменьшить количество написанных символов, но все же.
Сейчас у меня есть следующий фрагмент кода, который отображается на два источника настроек: базу данных и файл .properties:
import lombok.*;
@Getter
@ToString
@EqualsAndHashCode
public final class Setting<T> {
private String id;
private Class<T> clazz;
private Setting(final String id, final Class<T> clazz) {
this.id = id;
this.clazz = clazz;
}
public static final Setting TOKEN_LENGTH = new Setting("TOKEN_LENGTH", Integer.class);
// lots of other settings
}
Дело в том, что я хочу избежать явной передачи первого аргумента конструктору, например, как переменная с именем TOKEN_LENGTH
имеет идентификатор TOKEN_LENGTH
, переданный ей.Иначе, когда создаются эти static final
переменные, их первым аргументом всегда является имя указанной переменной.
В этом случае создается только ~ 60 экземпляров этого класса, и это происходит только призапуск приложения, поэтому любые издержки, вызванные отражением, приемлемы.
Интересно, есть ли способ переписать конструктор, чтобы он выглядел примерно так:
private Setting(final Class<T> clazz) {
this.id = /* some crazy reflection magic */
this.clazz = clazz;
}
Итак, вопрос в следующем:
➥ Случайно, есть ли способ получить имя статической переменной, для которой объект создается и назначается?
UPD:
Существуетрешение, которое сначала создает все переменные, а затем последовательно устанавливает поле id
.Я все еще ищу способ сделать это «атомарно» в конструкторе.