如何从枚举在Kotlin中创建编译时常量?
我有一个注释要求如何从枚举在Kotlin中创建编译时常量?,kotlin,annotations,compile-time-constant,graphql-spqr,Kotlin,Annotations,Compile Time Constant,Graphql Spqr,我有一个注释要求defaultValue是编译时常量。我从下面的enum中获取defaultValue: enum class RaceType { MARATHON, SPRINT; companion object { fun apply(type: RaceType): RaceDto { return when (type) { MARATHON -> MarathonDto()
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.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;
}
@Retention(RetentionPolicy.RUNTIME)
@目标({ElementType.PARAMETER})
public@interface graphql参数{
字符串NONE=“\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n”;
字符串NULL=“\n\t\t\n\t\t\n\ue000\ue001\ue002\ue003\n\t\t\t\t\n”;
字符串名();
字符串描述()默认为“”;
字符串defaultValue()默认值“\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n”;
等级
有没有办法使Kotlin中的fromenum
编译时常量用于注释
不,因为正式的enum
s
>请考虑<代码>密封< /代码>类:
密封级电缆管道类型{
对象:RaceType(){
const val name=“MARATHON”//此处需要复制粘贴,直到https://youtrack.jetbrains.com/issue/KT-16304
}
对象SPRINT:RaceType()
伴星{
趣味应用(类型:RaceType):RaceDto{
当(type){//由于密封类,检查处于编译时返回
马拉松->马拉松()
SPRINT->SprintDto()
}
}
}
}
还需要一小部分复制粘贴。请对或进行投票
但是,据我所知,这并不能解决@QraphQLArgument(defaultValue=RaceType.SPRINT.name)的问题
不幸的是,因为类的名称与值不同。换句话说,对于密封的类,您需要编写代码将输入字符串转换为它们。Thx。这是一个很好的解决方法,至少我知道为什么找不到解决方案。