【发布时间】:2020-11-19 11:55:29
【问题描述】:
当我遍历 Sprite 列表并检查它们是否实现 UsesObjectPool 时,由于类型擦除,我遇到了这些问题:
*如果我尝试检查它的类型,我得到:
无法检查已擦除类型的实例:UsesObjectPool
if(it is UsesObjectPool<Sprite>)
{
it.objectPool.releaseObject(it)
}
- 如果我使用通配符 * 来检查,它会说:
"必填参数Nothing,找到Sprite & UsesObjectPool:
if(it is UsesObjectPool<*>)
{
it.objectPool.releaseObject(it)
}
*如果我将它转换为 UsesObjectPool,我会得到:
类型参数不在其范围内。预期的: 找到 UsesObjectPool:Sprite
if(it is UsesObjectPool<*>)
{
(it as UsesObjectPool<Sprite>).objectPool.releaseObject(it)
}
泛型类和接口:
interface UsesObjectPool<T> where T :UsesObjectPool<T>, T : Sprite
{
val objectPool: BaseObjectPool<T>
}
abstract class BaseObjectPool<T> where T : UsesObjectPool<T>, T : Sprite
{
fun releaseObject(instance: T)
{
//Implementation
}
}
【问题讨论】:
标签: java android kotlin generics