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

将“符号”字段添加到Java类,java,java-annotations,Java,Java Annotations,我有一个库,我必须用特定字段动态标记一个类代码生成,我不希望生成的元数据字段名与用户定义的字段名冲突 使用JavaScript,我们可以使用来完成这项工作。我们可以使用符号创建getter/setter和检索字段,这样可以防止名称冲突 因此,使用JS,它可能看起来像: export class Foo { static libraryDefinedField = Symbol('lib.defined') userDefinedField = 'whatev'; setLibr

我有一个库,我必须用特定字段动态标记一个类代码生成,我不希望生成的元数据字段名与用户定义的字段名冲突

使用JavaScript,我们可以使用来完成这项工作。我们可以使用符号创建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实现这一点——在类上创建不会与用户定义的字段冲突的实例或静态字段

请注意,使用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];
  }

} 

Java没有ES6那样的符号概念


如果你只想标记一个类,为什么不考虑让类实现一个可能是空的接口?类和接口名称是唯一的。

元数据字段和用户定义字段是什么意思?Java不是一种脚本语言,用户,无论他们在这个上下文中是谁,都不能只定义字段。除了java的作用域之外,一个类中的字段不会与另一个类中的字段冲突,即使它们具有相同的名称。@JoakimDanielson我认为您忽略了一个事实,即这个问题是关于代码生成的-用户可以定义任意数量的字段。是的,我只需要一个唯一的名称,它不太可能或不可能与用户命名/用户定义的字段冲突