Tag: 枚举

Kotlin:如何用扩展函数扩展enum类

我想用下面的函数扩展类型为String枚举类,但无法在调用站点使用它,如下所示: fun <T: Enum<String>> Class<T>.join(skipFirst: Int = 0, skipLast: Int = 0): String { return this.enumConstants .drop(skipFirst) .dropLast(skipLast) .map { e -> e.name } .joinToString() } MyStringEnum.join(1, 1); 我在这里做错了什么?

我怎样才能得到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 […]

枚举数的扩展函数,`values()`不可用?

如果我尝试键入: enum class EGraphicsAPIConvention(@get:JvmName("i") val i: Int) { API_DirectX(0), API_OpenGL(1) } fun EGraphicsAPIConvention.of(i: Int) = values().first { it.i == i } 编译器抱怨: 未解决的参考值 this.values()也没有帮助 为什么我没有values()可用?

有没有办法强制你切换在Java中枚举的所有定义的值?

假设你有一个3值的枚举: enum Colors { RED, GREEN, BLUE } 你用某种方法切换它的所有值,认为你已经处理了所有的情况: switch (colors) { case RED: … case GREEN: … case BLUE: … } 之后,您将为枚举添加一个新的值: enum Colors { RED, GREEN, BLUE, YELLOW } 而且所有东西都编译得很好,除非你在方法中默默地忽略了YELLOW的情况。 有没有办法在这种情况下提出一个编译时错误? 编辑:不明白为什么这被标记为一个愚蠢的我可以添加和删除在Java运行时枚举的元素 。 由于答案是“否”,这意味着应该有可能在编译时知道枚举的所有值,因此我所要求的编译器/某些代码分析工具应该可以实现,对?

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

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

Android:如何把一个枚举放入一个包中?

如何添加一个Enum对象到Android Bundle?

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

我写了一个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 我可以做到没有反射? 如果没有,如何用科特林思考做到这一点? 该想法是从枚举值迭代到下一个。 但是只有一个特定的值,而不是整个枚举values()列表。 我想要防止的事情是将以下添加到每个枚举类型: fun next() = if (this.ordinal == Color.values().size – 1) Color.values()[0] else Color.values()[this.ordinal + 1]

如何在一组Enum类中为String和Enum值编写可重用的转换? (Kotlin)

我有一个> 5的Enum类,它的值中包含String参数,我想要所有这些Enum类的简单代码从JSON对象中的字符串字段进行转换。 enum class Religiousness(val jsonStr: String, val resID: Int) { NotAtAll("none", R.string.not_religious), Somewhat("somewhat", R.string.somewhat_religious), Very("very", R.string.very_religious), ; override fun toString() = jsonStr fun displayString(res: Resources) = res.getString(resID) } 我想能够写这样的代码 fun JsonConvertStrToEnum(enumClass: Class<Enum<*>>, str: String): Enum<*> { for (enumval in enumClass.enumConstants) { if ((enumval as IJsonStringConvertible).jsonStr() == str) return enumval } throw IllegalArgumentException("Gave an invalid […]

应用枚举包含3个适配器在Kotlin的2个活动之间

我不知道是否有人可以帮我解决Main2Activity.kt代表2对象的枚举问题? 我有2个活动之间的连接:网格视图MainActivity.kt的第一个活动,列表视图Main2Activity.kt第二个Main2Activity.kt ,我有MainActivity.kt和( adapter1 , adapter2 )从Main2Activity.kt 3对象实例( adapter )和我想在MainActivity.kt点击特定图像时传递特定的对象实例 注意:我正在使用BaseAdapter 。 这是一个MainActivity.kt class MainActivity : AppCompatActivity() { var adapter:FoodAdapter?=null var listOfFoods =ArrayList<Food>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(layout.activity_main) // load foods listOfFoods.add(Food("Coffee"," Coffee preparation is", a)) listOfFoods.add(Food("Coffee"," Coffee preparation is", b)) listOfFoods.add(Food("Coffee"," Coffee preparation is", c)) listOfFoods.add(Food("Coffee"," Coffee preparation is", d)) adapter= FoodAdapter(this,listOfFoods) […]

如何合并具有相同父接口的kotlin中的两组枚举?

我正在尝试执行以下操作: val list = MyEnum1.values().filterIsInstance(MyParentInterface::class.java) .plus(MyEnum2.values().filterIsInstance(MyParentInterface::class.java)) 在Android Studio上,lint抱怨说filterIsInstance是一个“无用的集合类型调用”。 但是,如果我删除它, plus(MyEnum2.values()…不起作用,因为它们不是相同的类型。 这是将两个枚举的值合并成一个列表的正确方法吗? 编辑:我的枚举看起来像这样: enum class MyEnum1 : MyParentInterface { ENUM1_TYPE1, ENUM1_TYPE2 }