【发布时间】:2020-05-06 16:32:30
【问题描述】:
我有一个注释,要求 defaultValue 是编译时常量。我从下面的enum 中取defaultValue:
enum class RaceType {
MARATHON,
SPRINT;
companion object {
fun apply(type: RaceType): RaceDto {
return when (type) {
MARATHON -> MarathonDto()
SPRINT -> SprintDto()
}
}
}
}
我的dtos 如下:
interface RaceDto {
}
data class MarathonDto: RaceDto
data class SprintDto: RaceDto
当我使用注解 @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;
}
我查看了similar questions,但没有找到解决方法。我还发现了与该主题相关的article,但到目前为止没有任何效果。
旁注:我无法更改注释,因为它来自库,我也无法更改库。
总而言之,有没有办法让 Kotlin 中的 enum 编译时常量在注解中使用?
【问题讨论】:
标签: kotlin annotations compile-time-constant graphql-spqr