【问题标题】:generic interfaces with reified methods具有具体方法的通用接口
【发布时间】:2017-09-23 18:32:32
【问题描述】:

我有几个对象要重新解释记忆:

interface reinterpreter<T> {
    operator fun get(index: Int): T
    operator fun set(index: Int, value: T): Any
}

object vec1bData : reinterpreter<Vec1b> {    
    override operator fun get(index: Int) = Vec1b(data, index * Vec1b.size)    
    override fun set(index: Int, value: Vec1b) = value.to(data, index * Vec1b.size)    
}

但是当我输入时

inline fun <reified T> data():reinterpreter<T> = when (T::class.java) {    
        Vec1b::class.java -> vec1bData    
}

我明白了:

需要reinterpeter&lt;T&gt;,但找到了vec1bData

我该如何解决?

【问题讨论】:

    标签: generics interface kotlin inline kotlin-reified-type-parameters


    【解决方案1】:

    vec1bData 类型不是reinterpeter&lt;T&gt; 的有效替代品,因为vec1bDataT 不是通用的,而是设置为Vec1b

    这意味着,只取函数签名fun &lt;reified T&gt; data(): reinterpreter&lt;T&gt;,你必须返回一个reinterpreter&lt;T&gt;。相反,您返回一个vec1bData,它的类型是reinterpreter&lt;Vec1b&gt;,而不是reinterpreter&lt;T&gt;

    【讨论】:

    • 强制转换在这里会有所帮助,在 Kotlin 中它是通过 as 关键字完成的。
    猜你喜欢
    • 2015-07-09
    • 2019-10-12
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2017-06-18
    相关资源
    最近更新 更多