我怎样才能得到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 }