将“符号”字段添加到Java类

时间:2018-12-01 08:41:57

标签: java java-annotations

我有一个图书馆,我必须动态标记带有某些字段的类(代码生成),并且我不希望生成的元数据字段名称与用户定义的字段名称冲突。

使用JavaScript,我们可以使用ES6 Symbols来做到这一点。我们可以使用符号创建getter / setter并检索字段,这样可以防止名称冲突。

因此,使用JS可能看起来像这样:

export class Foo {

  static libraryDefinedField = Symbol('lib.defined')

  userDefinedField = 'whatev';

  setLibraryDefinedField(v){
    this[Foo.libraryDefinedField] = v;
  }

  getLibraryDefinedField(v){
    return this[Foo.libraryDefinedField];
  }

} 

是否可以用Java做到这一点-在不会与用户定义的字段冲突的类上创建 instance或static 字段?

注意,如果使用JS,如果存在用户生成的 static 字段属性,并且我们想防止名称冲突,则可以这样做:

// 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 :(得分:1)

Java没有像ES6那样的符号概念。

如果您只是想“标记”一个类,为什么不考虑使该类实现一个(可能为空)接口呢?类和接口名称是唯一的。