当前位置: 首页 > 知识库问答 >
问题:

静态编程语言反思:如何知道静态编程语言类是否标有“内部”可见性修饰符

景德海
2023-03-14

我正在使用KotlinPoet和Auto Service自动生成代码。我没有找到任何方法来知道带注释的类是否具有“内部”修饰符,因此我可以使用相同的修饰符创建另一个类。例如:

@MyAnnotation
internal class Car

所以我想使用静态编程语言反射我将能够得到这些信息,但没有运气。

关于如何做到这一点的任何线索?

共有3个答案

艾子石
2023-03-14

由于内部是可见性修饰符,因此您应该在KClassAPI中查找相关内容。以下内容将对您有所帮助:

 /**
 * Visibility of this class, or `null` if its visibility cannot be represented in Kotlin.
 */
@SinceKotlin("1.1")
public val visibility: KVisibility?

像这样使用: Car::class.visibility //INTERNAL

百里沛
2023-03-14

静态编程语言的KClass具有可见性属性,可以是KVisibility.INTERNAL

谯皓君
2023-03-14

Kotlin反射在注释处理期间不适用。Kotlin反射用于在运行时检查代码。然而,有一种方法可以解析Kotlin类文件中的元数据,它被称为kotlinx-metadata-jvm。

要在注释处理器中使用它,您必须获取kotlin.Metadata注释的AnnotationMirror。从该镜像中获取注释值并使用它们来构造KotlinClassHeader,正如您在kotlinx-元数据-jvm的示例中看到的那样。到达那里后,您可以使用kotlinx-元数据-jvm来提取类的标志。

 类似资料:
  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 我正在尝试使用柯特林 V1.2.70、Gradle V4.10.1 和 Java 11。使用 gradle 编译项目时,出现错误,指出“未知的 JVM 目标版本:11。支持的版本:1.6,1.8“。 Kotlin 编译器是否支持 Java 11(生成与 Java 11 JVM 兼容的代码)?如果是这样,如何使用渐变配置?

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 我在我的一个项目中使用RxJava,我使用Android Studio插件将我的一个类转换为静态编程语言,并在maplambda(java中的Func1)之一中,中间体返回如下所示。 我不知道这意味着什么。

  • 上周我更新了Kotlin 1.5,昨天看到谷歌打算让Jetpack成为设计UI的首选选项后,我想做一些测试。 问题是将我的项目更新为静态编程语言1.5,当尝试构建项目时,我得到以下错误: 静态编程语言1.5与Jetpack Compose不兼容吗?在谷歌搜索问题后,我找到了版本,其中提到了Jetpack Compose,但不是以“不兼容”的方式。 你对此有任何答案吗?我应该使用吗?在这种情况下,我

  • 我喜欢这种Swift语法;它对很多事情都很有帮助: 我很想在科特林做这件事。但是,我找不到合适的语法! 科特林有这样的事吗?