Max*_*xim 5 java generics scala
假设我们在某个外部库中定义了以下 Java 接口(因此我们无法控制它):
public interface JavaTest<R extends Something> { }
public class JavaTestImpl implements JavaTest<SomethingSpecific> {
public static final JavaTestImpl INSTANCE = ...
}
Run Code Online (Sandbox Code Playgroud)
现在我们想要编写 Scala 函数,它将采用任意实例JavaTest作为参数,并提取实例本身的类型和R泛型参数(例如,我们想要对实例类进行隐式类型类查找):
def test[A <: Something, X <: JavaTest[A]](x: X)(implicit tc: TypeClass[X]): A = {}
test(JavaTestImpl.INSTANCE) // should be [SomethingSpecific, JavaTestImpl]
Run Code Online (Sandbox Code Playgroud)
不幸的是,它的工作方式并不简单:编译器将调用test推断为 as [Nothing, JavaTestImpl],然后立即失败,因为推断的类型是错误的并且不满足约束。
有没有办法让 Scala 编译器推断相应的类型参数,而无需更改 Java 部分,也无需每次都编写大量样板文件?SomethingSpecific或者,换个方式提出问题,如果我们知道实例 ( ) 的类型,是否有办法提取泛型类型( JavaTestImpl) ?
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |