Tag: 枚举

我怎样才能得到kotlin enum与cpp相同的行为

我想获得与cpp相同的行为: enum dxgi_format_gli { DXGI_FORMAT_R64_UINT_GLI = 1, DXGI_FORMAT_R64_SINT_GLI } DXGI_FORMAT_R64_UINT_GLI得到1,下一个得到2 我得到的最接近的是: private var counter: Int = 2; enum class dxgi_format_gli(i: Int = counter++) { DXGI_FORMAT_R64_UINT_GLI(1), DXGI_FORMAT_R64_SINT_GLI() } 不过,我希望它是动态的,也就是说每当我用一个参数调用构造函数,保存一个在counter和所有下面的构造函数增量和得到它.. 我已经在java中做了: public enum Dxgi_format_gli { DXGI_FORMAT_R64_UINT_GLI(1), DXGI_FORMAT_R64_SINT_GLI; public final int value; private static class Counter { private static short value = 0; } private Dxgi_format_gli() { value […]

有没有办法在Kotlin的数据类中嵌套一个枚举?

有没有办法在Kotlin的数据类中嵌套一个枚举? data class D(val a:Any) { enum class E {F,G} … } 或者在函数中声明它内联? fun foo() { enum class E {F,G} doSomething() } 我无法find允许声明枚举的规则的文档。

Kotlin:Collection既没有genericstypes,也没有OneToMany.targetEntity()

我有一个枚举类RoleType public enum RoleType { SYSTEM_ADMIN, PROJECT_ADMIN, USER; } 在我的User实体类,我有以下映射的枚举集合。 这是Java代码: @JsonProperty @ElementCollection @Enumerated(EnumType.STRING) @CollectionTable(name = “user_role”, joinColumns = @JoinColumn(name = “user_id”)) private Set roles; 我把这个User实体类转换成Kotlin ,这里是代码: @JsonProperty @Enumerated(EnumType.STRING) @ElementCollection @CollectionTable(name = “user_role”, joinColumns = arrayOf(JoinColumn(name = “user_id”))) var roles: kotlin.collections.Set? = null 转换后,hibernate抛出以下exception: Collection has neither generic type or OneToMany.targetEntity() defined: com.abmodel.User.roles 在Java之前它工作正常。 我也尝试像这样在@ElementCollection添加targetClass […]

Kotlin扩展为下一个枚举值没有reflection

我写了一个Kotlin扩展,为枚举值添加next() 。 但有没有更好的方法来做到这一点? fun <T : Enum> T.next(): T { val values = this::class.java.getEnumConstants() return if (this.ordinal < values.size – 1) values[this.ordinal + 1] else values[0] } enum class Color {Red, Yellow, Green} Color.Red.next() //Yellow 我可以做到没有reflection? 如果没有,如何用科特林思考做到这一点? 该想法是从枚举值迭代到下一个。 但是只有一个特定的值,而不是整个枚举values()列表。 我想要防止的事情是将以下添加到每个枚举types: fun next() = if (this.ordinal == Color.values().size – 1) Color.values()[0] else Color.values()[this.ordinal + 1]

在Kotlin中相当于C ++ Enum

我想解决的问题是: 我有一个元素列表。 名单可以很大,可以有很多。 我想通过索引访问它们。 对于那些索引我想用单词而不是数字。 我也想这个词是强types的,所以我不能混合数字。 我相信Kotlin枚举对于这个不好,因为每个枚举本身都是一个对象实例。 我可以使用Int常量,但是然后我失去了types安全性。 在c + +这个问题是由一个枚举解决的。 枚举可以被转换成它们的底层types(在编译时)被用作索引。 在相同的types中,Enum是一个types,如果一个函数将其作为参数,编译器将不允许传入整数。枚举本身不是对象本身,因此您可以拥有尽可能多的性能而不会影响性能。 C ++代码示例来显示我在找什么: string someArray[] = {“element 0”, “element 1”}; enum class Index { first = 0, second = 1, }; string getElement(Index i) { return someArray[(int)i]; } void foo() { auto element0 = getElement(Index::first); auto element1 = getElement(1); // compile time error […]

使用String name()声明实现Java接口的Kotlin枚举

我有一个Kotlin项目,我使用Java库依赖项来定义一个带有String name()方法声明的接口。 在Java中,我可以在枚举声明中使用此接口,其中String name()方法由枚举隐式实现。 public interface Aspect { int index(); String name(); } 在Java中这是可能的: public enum CollisionType implements Aspect { ONE, TWO, THREE; private final Aspect aspect; private CollisionType() { aspect = CONTACT_ASPECT_GROUP.createAspect(name()); } @Override public int index() { return aspect.index(); } } 如果我在一个Kotlin枚举类中尝试这个,由于冲突的名字“name”,我得到一个[冲突的遗留的JVM DECLARATIONS]错误。 我试图使用@JvmName注释来定义一个不同的名称,因为这种types的问题是建议做的,但是我无法正确使用这个问题。 enum class CollisionType : Aspect { ONE, TWO, TREE; […]

迭代:Kotlin是否有像Python一样的“枚举”function?

在Python中,我可以写: for i, element in enumerate(my_list): print i # the index, starting from 0 print element # the list-element 我怎样才能在Kotlin写这个?

为什么我不能访问Kotlin中的超类枚举?

我将一个Java Android项目转换为Kotlin。 我正在使用API.AI的客户端 ,它有两个AIConfiguration类: 超 package ai.api; public class AIConfiguration implements Cloneable { public static enum SupportedLanguages { English(“en”), //… } //… } 子类 package ai.api.android; public class AIConfiguration extends ai.api.AIConfiguration { public enum RecognitionEngine { //… } 在我的Java代码中,我正在创建一个子类的实例,正如api指南中的建议: final AIConfiguration config = new AIConfiguration(“TOKEN”, AIConfiguration.SupportedLanguages.English, AIConfiguration.RecognitionEngine.System); 一旦转换为Kotlin,看起来像这样: val config = AIConfiguration(“TOKEN”, AIConfiguration.SupportedLanguages.English, AIConfiguration.RecognitionEngine.System) …导致Unresolved […]