Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从枚举在Kotlin中创建编译时常量?_Kotlin_Annotations_Compile Time Constant_Graphql Spqr - Fatal编程技术网

如何从枚举在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中的from
enum
编译时常量用于注释

不,因为正式的
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。这是一个很好的解决方法,至少我知道为什么找不到解决方案。