我有一个注释要求defaultValue
是编译时常量。我从下面的enum
中获取defaultValue
:
enum class RaceType {
MARATHON,
SPRINT;
companion object {
fun apply(type: RaceType): RaceDto {
return when (type) {
MARATHON -> MarathonDto()
SPRINT -> SprintDto()
}
}
}
}
我的dto
s如下:
interface RaceDto {
}
data class MarathonDto: RaceDto
data class SprintDto: RaceDto
当我使用注解@QraphQLArgument(defaultValue=RaceType.SPRINT.name)
Kotlin需要RaceType。冲刺name
是编译时常量。
注释实现本身:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface GraphQLArgument {
String NONE = "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
String NULL = "\n\t\t\n\t\t\n\ue000\ue001\ue002\ue003\n\t\t\t\t\n";
String name();
String description() default "";
String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
Class<? extends DefaultValueProvider> defaultValueProvider() default JsonDefaultValueProvider.class;
}
我仔细研究了类似的问题,但没有找到解决方法。我还找到了一篇与这个主题相关的文章,但到目前为止没有任何效果。
附带说明:我不能更改注释,因为它来自库,我也不能更改库。
总而言之,有没有办法从静态编程语言中的枚举
编译时常量到注释中使用?
有没有办法让Kotlin中的fromenum
编译时常量用于注释?
不,因为在Java中,enum
s不是编译时常量。
但是请考虑<代码>密封< /代码>类:
sealed class RaceType {
object MARATHON: RaceType() {
const val name = "MARATHON" // copy-paste is required here until https://youtrack.jetbrains.com/issue/KT-16304
}
object SPRINT: RaceType()
companion object {
fun apply(type: RaceType): RaceDto {
return when (type) { // the check is in compile time, because of sealed class
MARATHON -> MarathonDto()
SPRINT -> SprintDto()
}
}
}
}
还需要一小部分复制粘贴。请投票表决kotlin编译器错误或遵循此线程。
然而,据我所知,这并不能解决@QraphQLArgument(defaultValue=RaceType. SPRINT. name)
的问题,因为类的名称与value不相同。换句话说,对于密封类,您需要编写代码将输入字符串转换为它们。
我希望函数位于类中(不污染全局名称空间),但可以静态访问(从不创建它们所在的对象)。提议的解决办法: 这是一个好的解决方案,还是不可避免地会创建一个对象?我应该使用哪种图案?
我使用的是Gradle 5.5,我有一个基于Groovy的构建脚本,我正试图将其迁移到Kotlin DSL。任务包含将所有依赖项复制到jar文件的典型行: 我找不到一种方法来把这一行翻译成Kotlin DSL。 让我给你一些背景知识。这是我最初基于Groovy的构建脚本: 这是我基于静态编程语言的构建脚本。它运行良好,除了一行:
我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?
我想知道为什么在下面的代码中没有捕捉到异常: 函数的调用方式如下: 但我还是遇到了一个导致应用程序崩溃的异常: 我想说try/catch块会捕获异常,但唉。。。 什么原因导致异常没有被捕获?我想说线程并不重要,因为我使用try/get块来处理线程中的异常。 在Laalto的回答之后,我更新了代码,如下所示(对于那些感兴趣的人):
我有一个具有多个字段的静态编程语言枚举。其中一个字段()是另一个枚举的值。在运行时,尽管已设置,但此val为空。 我以前从未见过这样的情况,其他字段工作正常,即使是引用当前项目的字段!我已经包含了完整的枚举定义,因为我不确定什么是相关的。 枚举和一个值,其中意外为空,而不是。 电路板枚举和相关值: 这是意外为空的截图: 附加说明: 我尝试更改树9中的其他值,它们都会更新,因此包含的定义肯定就是所使
如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。