gpt4 book ai didi

generics - Kotlin:枚举上的通用迭代器:如何声明类型变量

转载 作者:行者123 更新时间:2023-12-02 21:35:13 29 4
gpt4 key购买 nike

我的枚举通用迭代器(非编译)代码如下:

class EnumIterator<T: Enum<T>>: Iterator<T> 
{
private var cursor = 0

override fun hasNext(): Boolean = cursor < enumValues<T>().size - 1
override fun next(): T = enumValues<T>()[cursor++]
}

IntelliJ IDE 将两个 enumValues< T > 中的 T 标记为红色:

"Cannot use 'T' as reified type parameter. Use a class instead."

如何声明类型参数来消除错误?

最佳答案

没有具体化类型

enum class Example {
A, B, C, D
}

fun <T: Enum<T>> iterator(values:()->Array<T>):Iterator<T> = values()
.asIterable()
.iterator()

fun main(args: Array<String>) {

val iterator = iterator(Example::values)

iterator.forEach {
println(it)
}
}

这通过使用函数而不是包装类来工作,根据您的使用,它可能是一个更好的选择。

具体化类型

enum class Example {
A, B, C, D
}

inline fun <reified T: Enum<T>> iterator():Iterator<T> = enumValues<T>().iterator()

fun main(args: Array<String>) {

val iterator = iterator<Example>()

iterator.forEach {
println(it)
}
}

这需要显式设置类型,但不需要对值方法的引用。

关于generics - Kotlin:枚举上的通用迭代器:如何声明类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49855273/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com