Добавить поле «символ» в класс Java - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть библиотека, я должен динамически помечать класс определенным полем (генерация кода), и я не хочу, чтобы имена полей метаданных, которые я генерирую, конфликтовали с именами пользовательских полей.

Используя 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];
  }

} 

1 Ответ

0 голосов
/ 01 декабря 2018

Java не имеет понятия о символах, как у ES6.

Если вы просто хотите «пометить» класс, почему бы не подумать о том, чтобы заставить класс реализовать (возможно, пустой) интерфейс?Имена классов и интерфейсов уникальны.

...