小编cra*_*all的帖子

如何在运行时访问在案例类字段上定义的注释

我已经定义了以下java Annotation

   @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.FIELD})
   @Retention(RetentionPolicy.RUNTIME)
   public @interface MyAnnotation { 
     String value() default "";
   }
Run Code Online (Sandbox Code Playgroud)

我定义了以下scala案例类:

@Prefer("xyz")
case class TestAnno(arg1 : String, @Prefer("abc") agr2 : String)
Run Code Online (Sandbox Code Playgroud)

我能够使用反射看到在案例类级别定义的注释,但是我无法访问arg2为案例类成员定义的注释TestAnno.反编译代码我发现变量声明或它的scala访问器似乎都没有注释.只有构造函数定义和copy方法似乎保留了case类声明中定义的参数的注释.

是否有其他方法可以强制scala编译器为case类中声明的字段生成注释,或者我必须读取构造函数并使用诸如ASM ByteCode LibraryParaNamer之类的来查找哪些参数具有哪些注释?需要一个主要适用于Scala案例类的解决方案.

reflection parameters constructor scala

12
推荐指数
3
解决办法
5600
查看次数

使用sbt编译Java注释

我创建了Java注释(因为我需要运行时保留)$PROJECT/src/main/java和我的scala代码,我们使用这些java注释$PROJECT/src/main/scala.这样创建的Java注释也使用Java ENUM作为它的值.

如果我编译项目,那么sbt似乎不会首先编译Java注释,并且在注释中每次使用枚举时都会出错.如果我在scala代码中的注释中注释掉Java枚举的所有用法并进行编译,取消注释枚举用法并再次编译它一切正常.

$PROJECT/src/main/java在执行干净构建时,如何确保sbt 在尝试编译scala代码之前编译我的java注释和枚举(即)?

编辑:我有一个裸骨build.sbt,我正在使用sbt 0.11.2

scala sbt

4
推荐指数
1
解决办法
1327
查看次数

标签 统计

scala ×2

constructor ×1

parameters ×1

reflection ×1

sbt ×1