【问题标题】:Custom annotations in scalascala中的自定义注释
【发布时间】:2021-01-15 01:05:39
【问题描述】:

我正在使用 Scala 编程语言。我想创建自定义注释来注释案例类的字段。

this 线程展示了如何创建它,但我的场景面临两个问题

  1. 可以有 .在注释中。例如@abc.xyz
  2. 我想创建不带参数的注释。所以我无法创建案例类

我该怎么做?

谢谢

【问题讨论】:

    标签: scala annotations case-class


    【解决方案1】:

    广告。 1 - 您可以使用反引号在名称中包含 .,但我认为有 0 个理由(您可以将 xyz 放入 abc 包中)

    // possible but it's anti-pattern
    class `abc.xyz` extends scala.annotation.StaticAnnotation
    
    case class Test(
      @`abc.xyz` field: String
    )
    
    // better
    package my.abc
    
    class xyz extends scala.annotation.StaticAnnotation
    
    // elsewere
    
    import my.abc
    
    case class Test(
      @abc.xyz field: String
    )
    

    广告。 2 什么注释参数与案例类有关?注释不一定是case class。有些人使用它是因为在宏中他们可以对具体化注释值使用模式匹配,但仅此而已。

    case class Foo() extends scala.annotation.StaticAnnotation
    
    class Bar extends scala.annotation.StaticAnnotation
    
    case class Test(
      @Foo foo: String,
      @Bar bar: String
    )
    

    【讨论】:

    • 我选择了 Ad 1 更好的溶胶。跟进问题。我想用“@abc.xyz”和更高级别进行注释,例如“@abc.xyz.pqr”在一起。如果我在 abc 中创建另一个包 xyz 并将 pqr 类放入其中,则会收到此错误:“包 abc 包含具有相同名称的对象和包:xyz”。我该如何解决这个问题?课堂内可以上课吗?如果是怎么办?
    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多