我想定义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表明只有在想要将其他注释传播到生成的访问器上时,目标才有用。那么,定义上述特征的正确方法是什么?
答案 0 :(得分:1)
它恰好是Scala 2.11.x中的一个错误:https://issues.scala-lang.org/browse/SI-8813
我的搜索没有像2.11.1那样出现这个问题,警告是“方法上没有注释的有效目标”,而在2.11.2中,“没有有效的注释目标”的值强>“