1 回答

TA貢獻1854條經驗 獲得超8個贊
可空類型本身不是類,因此它們沒有類對象。這就是KClass's 類型參數有Any上限的原因。
您可以調用可::class.java為 null 的具體化類型,但它將被評估為與相應非 null 類型上的相同調用相同的類對象。因此,如果替換E::class.javaObjectType為E::class.java,將在運行時檢查元素的類型,但不會進行 null 檢查。
如果需要空檢查,可以自己添加。我還建議將數組創建移至工廠方法。您可以這樣做:
class CheckedStack<E>(private val array: Array<E?>, private val isNullable: Boolean) : Stack<E> {
companion object {
// This method invocation looks like constructor invocation
inline operator fun <reified E> invoke(size: Int): CheckedStack<E> {
return CheckedStack(arrayOfNulls(size), null is E)
}
}
private var index: Int = -1
override fun push(elem: E) {
if (!isNullable) elem!!
check(index < array.size - 1)
array[++index] = elem
}
override fun pop(): E {
check(index >= 0)
@Suppress("UNCHECKED_CAST")
return array[index--] as E
}
}
添加回答
舉報