我对scala非常陌生,并且挣扎于暗示的概念。
我的课程定义如下:
class SomeClass[A <: AA, B <: BB](val someParameter: String)
我想将这个类与其他不继承AA和BB的类一起使用,如下所示:
val myInstanceOfSomeClass = SomeClass[C, D]
知道C和D(它们是Java类,如果有帮助)可以转换为AA和BB实例,这要归功于它们的构造函数
def myAInstance(someCValue : C) : A = new A(someCValue)
值myInstanceOfSomeClass
在另一个函数中用作SomeClass [C,D]类型的参数。
我知道它与隐式定义有关但我对语法很遗憾,特别是在哪里以及如何定义隐式定义......
那么,我怎样才能将SomeClass与其他可转换为定义类型的类型一起使用?
编辑:我无法直接修改SomeClass[A <: AA, B <: BB]
的定义,因为它来自外部库。
答案 0 :(得分:2)
有一个称为“视图绑定”的相关类型绑定,用<%
标注,通过包含文字子类型以及在使用点可获得隐式转换的类型来放宽<:
约束
所以你需要做的就是将你的SomeClass
更改为:
class SomeClass[A <% AA, B <% BB](val someParameter: String)
...当然,确保隐式转换在您要使用该类的位置可用。这意味着转化时需要implicit
关键字:
implicit def myAInstance(someCValue : C) : A = new A(someCValue)