【发布时间】:2019-04-01 21:26:42
【问题描述】:
我有以下用Java编写的接口方法定义:
<T extends View & ISpecificView> T getSpecificView();
基于 Java 的消费者代码可以简单地通过调用该方法并将返回值视为扩展 View 类并通过以下方式实现 ISpecificView 接口的对象来操作此方法:
getContainer().getSpecificView().whateverTclassMethod()
尝试在 Kotlin 中调用相同的代码时,我在 getSpecificView() 方法上收到了 Type inference failed: Not enough information to infer parameter T (...) Please specify it explicitly 错误。
我很想明确地提供类型,但我无法传递任何特定的类,因为它可能是实现ISpecificView 接口的View 类的任何祖先。传递单个 View 或 ISpecificView 无济于事 - 它会导致 Type argument is not within its bounds. Expected: View! Found ICustomView ,反之亦然。
在调用方法时是否有可能在 Kotlin 中传递与 Java 的 T extends View & ISpecificView 等效的值,以便我可以使用它?
【问题讨论】:
-
顺便说一句,这比我想象的要难。至少就我的 Kotlin 知识而言
-
我还认为将 Java 代码转换为 Kotlin 会很简单,但如果您有很多抽象,它会变得非常复杂。
标签: java android generics kotlin interface