隐含和类型定义

时间:2014-04-01 15:44:41

标签: scala

我对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]的定义,因为它来自外部库。

1 个答案:

答案 0 :(得分:2)

有一个称为“视图绑定”的相关类型绑定,用<%标注,通过包含文字子类型以及在使用点可获得隐式转换的类型来放宽<:约束

所以你需要做的就是将你的SomeClass更改为:

class SomeClass[A <% AA, B <% BB](val someParameter: String)

...当然,确保隐式转换在您要使用该类的位置可用。这意味着转化时需要implicit关键字:

implicit def myAInstance(someCValue : C) : A = new A(someCValue)