【发布时间】:2021-10-29 02:00:28
【问题描述】:
我试图弄清楚如何将具有通用类型的接收器传递给另一个函数,以尝试在该其他函数中实现必要的功能。但是,我不断收到类型不匹配错误。
我尝试过的: 尝试将第二个函数的泛型转换为相应的类型,并尝试具体化相应的泛型 T 。在这一点上,我正在为这个问题挠头。任何帮助将不胜感激
错误: 类型不匹配需要 T 找到播放器 需要类型不匹配 T 找到 NPC
问题出现在第二个函数中,其中我有带有参数 function 的 forLoop
class EntityFinder {
companion object {
inline fun<reified T: Entity> forEach(
radius: Int,
entityList: List<T>,
position: Position,
function: (entity: T) -> Boolean
): Boolean {
return false
}
inline fun <reified T : Entity> forEach(
position: Position,
radius: Int,
function: (entity: T) -> Boolean
) {
val radiusChunkSize = ceil((radius / 8.0f).toDouble()).toInt()
val fullWidth = radiusChunkSize shl 3
val centerX: Int = position.x
val centerY: Int = position.y
val centerZ: Int = position.height
val checkPlayers = T::class.java.isAssignableFrom(Player::class.java)
val checkNpcs = T::class.java.isAssignableFrom(NPC::class.java)
val startX = max(0, centerX - fullWidth)
val startY = max(0, centerY - fullWidth)
val endX = max(0x3FFF, centerX + fullWidth)
val endY = max(0x3FFF, centerY + fullWidth)
for (x in startX..endX step 8) {
for (y in startY..endY step 8) {
val chunk = ChunkManager[Position(x, y, centerZ)] ?: continue
if (checkPlayers) if (!forEach(radius, chunk.players, position, function)) return
if (checkNpcs) if (!forEach(radius, chunk.npcs, position, function)) return
}
}
}
}
}
【问题讨论】:
标签: kotlin generics kotlin-reified-type-parameters