在Kotlin中创建一个注释实例

我有一个用Java编写的框架,使用reflection,获取注释上的字段,并根据它们做出一些决定。 在某些时候,我也可以创建一个注释的临时实例并自己设置字段。 这部分看起来像这样:

public @interface ThirdPartyAnnotation{ String foo(); } class MyApp{ ThirdPartyAnnotation getInstanceOfAnnotation(final String foo) { ThirdPartyAnnotation annotation = new ThirdPartyAnnotation() { @Override public String foo() { return foo; } }; return annotation; } } 

现在我正在努力做Kotlin的确切的事情。 请记住,注释位于第三方jar中。 无论如何,这里是我在Kotlin试试的:

 class MyApp{ fun getAnnotationInstance(fooString:String):ThirdPartyAnnotation{ return ThirdPartyAnnotation(){ override fun foo=fooString } } 

但编译器抱怨:Annotation类不能被实例化

所以问题是:我应该如何在Kotlin中做到这一点?

这是我可能find的解决方案,但感觉像对我来说是一个黑客,我宁愿能够在语言内解决它。 无论如何,值得的是这样的:

 class MyApp { fun getInstanceOfAnnotation(foo: String): ThirdPartyAnnotation { val annotationListener = object : InvocationHandler { override fun invoke(proxy: Any?, method: Method?, args: Array?): Any? { return when (method?.name) { "foo" -> foo else -> FindBy::class.java } } } return Proxy.newProxyInstance(ThirdPartyAnnotation::class.java.classLoader, arrayOf(ThirdPartyAnnotation::class.java), annotationListener) as ThirdPartyAnnotation } }