我简化了解决问题的代码,所以可以说我有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,希望他们能为此做些事情。