java - 将 "symbol"字段添加到 Java 类

标签 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 以某种方式做到这一点 - 在类上创建不会与用户定义字段冲突的实例或静态字段?

注意使用 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 那样的符号概念。

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

关于java - 将 "symbol"字段添加到 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569139/

相关文章:

java - 如何抑制 Lombok 警告

java - JAXB 解码异常找不到媒体类型 : text/html;charset ="UTF-8" 的 JAXBContextFinder

java - 联系人列表 Android,仅显示已安装该应用的用户

java - 我有一个带有@Override 的方法,如何查看声明接口(interface)?

spring - 使用 mockito 为 spring-boot 应用程序模拟 Qualified bean

java - Spring AOP : Advice on annotation used over another advice

java - 有没有办法在实现方法时包含接口(interface)的名称

Java注释-限制具有相同字段元素值的注释的基数(出现)

java - 替换底部导航中的 fragment

java - 我应该使用八角树吗?