Dmy*_*kyi 3 annotations compile-time-constant kotlin graphql-spqr
我有一个需要defaultValue编译时常量的注释。我defaultValue从enum下面:
enum class RaceType {
MARATHON,
SPRINT;
companion object {
fun apply(type: RaceType): RaceDto {
return when (type) {
MARATHON -> MarathonDto()
SPRINT -> SprintDto()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的dtos如下:
interface RaceDto {
}
data class MarathonDto: RaceDto
data class SprintDto: RaceDto
Run Code Online (Sandbox Code Playgroud)
当我使用注释时,@QraphQLArgument(defaultValue = RaceType.SPRINT.name)Kotlin 要求RaceType.SPRINT.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;
}
Run Code Online (Sandbox Code Playgroud)
我查看了类似的问题,但没有看到如何解决的方法。我还找到了与该主题相关的文章,但到目前为止没有任何效果。
旁注:我无法更改注释,因为它来自库,我也无法更改库。
总而言之,有没有办法让enumKotlin 中的编译时常量在注释中使用?
有没有办法从
enumKotlin 中的编译时常量生成以在注释中使用?
不,因为形式上的enums不是 Java 中的编译时常量。
但是,请考虑以下sealed课程:
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()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
仍然需要复制粘贴的一小部分。请对kotlin 编译器错误投票或关注此线程。
但是,据我了解,@QraphQLArgument(defaultValue = RaceType.SPRINT.name)不幸的是,这并不能解决您的问题,因为类的名称与值不同。换句话说,对于密封类,您需要编写代码将输入字符串转换为它们。
| 归档时间: |
|
| 查看次数: |
2373 次 |
| 最近记录: |