我怎样才能得到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 = Counter.value; Counter.value++; } private Dxgi_format_gli(int value) { this.value = value; Counter.value++; } }
但我没有使用Kotlin ..
我认为你只需要设置价值和移动增量,使其工作 – 所以最初的计数器和价值是相同的。
enum class Dxgi_format_gli { DXGI_FORMAT_R64_UINT_GLI(1), DXGI_FORMAT_R64_SINT_GLI; val value: Int private object Counter { var value: Int = 0 } constructor() { Counter.value++ value = Counter.value.toInt() } private constructor(value: Int) { this.value = value Counter.value = value } }
每个enum
已经有一个自动生成的属性ordinal
:
enum class A {a, b, c} Aaordinal // 0 Abordinal // 1 Acordinal // 2
所以在技术上最简单的方法来得到你想要的是dxgi_format_gli.DXGI_FORMAT_R64_UINT_GLI.ordinal + 1
(我不知道为什么你不想从0
0_o开始)
你可以用下面的代码来替换@ griffio的答案:
enum class Dxgi_format_gli { DXGI_FORMAT_R64_UINT_GLI, DXGI_FORMAT_R64_SINT_GLI; val value = ordinal + 1 }