У меня есть библиотека, я должен динамически помечать класс определенным полем (генерация кода), и я не хочу, чтобы имена полей метаданных, которые я генерирую, конфликтовали с именами пользовательских полей.
Используя JavaScript, мы можем использовать ES6 Symbols для этого.Мы можем создавать геттеры / сеттеры и извлекать поля с помощью символов и таким образом предотвращать конфликт имен.
Таким образом, при использовании JS это может выглядеть следующим образом:
export class Foo {
static libraryDefinedField = Symbol('lib.defined')
userDefinedField = 'whatev';
setLibraryDefinedField(v){
this[Foo.libraryDefinedField] = v;
}
getLibraryDefinedField(v){
return this[Foo.libraryDefinedField];
}
}
есть ли способ сделатькак-то это с Java - создать экземпляр или статические поля в классе, который не будет конфликтовать с пользовательскими полями?
Примечание , что с использованием JS, если былиСгенерированные пользователем статические свойства полей, и мы хотим предотвратить столкновение имен, мы могли бы сделать это:
// put the symbol outside the class, so even static properties won't conflict
const libraryDefinedField = Symbol('lib.defined');
export class Foo {
userDefinedField = 'whatev';
setLibraryDefinedField(v){
this[libraryDefinedField] = v;
}
getLibraryDefinedField(v){
return this[libraryDefinedField];
}
}