结合scala宏注解

Combining scala macro annotations

我不想合并两个宏注释。它编译得很好,但尝试在伴随对象上使用任何方法都会给出

java.lang.NoClassDefFoundError: Test$

如果单独使用,宏注释工作正常。

@JsonCodec:

import io.circe.generic.JsonCodec
@JsonCodec
case class Test(a: Int)

println(Test.decodeTest.hashCode())

>> 161960012

@镜头

import monocle.macros.Lenses
@Lenses("_")
case class Test(a: Int)

println(Test._a.hashCode())

>> 1685232414

但是如果我试着把它结合起来

import io.circe.generic.JsonCodec
import monocle.macros.Lenses
@Lenses("_")
@JsonCodec
case class Test(a: Int)

>> Done compiling.
>> [E] Exception in thread "main" java.lang.NoClassDefFoundError: Test$
>> [E]  at Main$.main(Main.scala:39)
>> [E]  at Main.main(Main.scala)
>> [E] Caused by: java.lang.ClassNotFoundException: Test$
>> [E]  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>> [E]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>> [E]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
>> [E]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>> [E]  ... 2 more

它会在运行时失败。

有什么方法可以修复它,还是它只是宏注释使用的限制?

更新: 定义伴随对象解决方法有效。

import io.circe.generic.JsonCodec
import monocle.macros.Lenses

@JsonCodec @Lenses("_") case class Test(a: Int)
object Test

看起来像宏注释限制。伴随对象解决方法有效

@JsonCodec @Lenses("_") case class Test(a: Int)
object Test