如何使用必须实现的@BeanProperty成员编写特征?

时间:2014-10-11 18:45:54

标签: scala annotations traits

我想定义Java代码使用的特征,因此为其成员提供Java友好的setter和getter是很方便的。 @BeanProperty注释为我做了这个,但是我不能让它与在特征中未定义的成员一起工作。以下内容:

import scala.beans.BeanProperty
trait A {
    @BeanProperty var useFoo: Boolean
}

产生警告no valid targets for annotation on method useFoo - it is discarded unused. You may specify targets with meta-annotations, e.g. @(scala.beans.BeanProperty @getter) trait A { @BeanProperty var useFoo: Boolean }

但是,它不会被丢弃。扩展上述特征的类,例如

class B extends A {
    var useFoo = false
}

被编译器正确拒绝,因为它没有实现BeanProperty的getter和setter。使用useFoo注释班级B中的@BeanProperty字段可使其按预期工作。但是,这似乎不是正确的方法,因为生成了上述警告。 The documentation for meta annotations表明只有在想要将其他注释传播到生成的访问器上时,目标才有用。那么,定义上述特征的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

它恰好是Scala 2.11.x中的一个错误:https://issues.scala-lang.org/browse/SI-8813

我的搜索没有像2.11.1那样出现这个问题,警告是“方法上没有注释的有效目标”,而在2.11.2中,“没有有效的注释目标”的