通过内联通用函数进行Kotlin类型推断

时间:2019-07-24 07:39:58

标签: kotlin

我简化了解决问题的代码,所以可以说我有2个通用接口:

interface Interface1<T>
interface Interface2<T>

是否有任何方法都没关系。然后,我创建了内联通用函数来创建通用对象,该通用对象实现了我需要的所有接口:

private inline fun <reified T> createValue() = object : Interface1<T>, Interface2<T> { }

然后我在用此函数初始化的类中添加了属性。现在,在这里使用自动类型推断很重要:

private val testPropertyInt = createValue<Int>()

所有这些代码将被编译。这足以在构造函数调用中引发VerifyError。如果我说此属性应为哪种类型,就不会有任何错误:

private val testPropertyInt: Interface1<Int> = createValue<Int>()

如果我将完整的代码放在这里,可能会很有用:

interface Interface1<T>
interface Interface2<T>

class KotlinBugTest {
    private val testPropertyInt = createValue<Int>()

    @Test
    fun testBug() {
        assertEquals(4, 2 + 2)
    }

    private inline fun <reified T> createValue() = object : Interface1<T>, Interface2<T> { }
}

问题是:

尽管在运行时无法使用该类型,为什么还要对其进行编译?我posted an issue on JetBrains tracker,希望他们能为此做些事情。

0 个答案:

没有答案