2014-04-01 81 views
2

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

回答

2

有一个与<%相关的称为“视图边界”的相关类型边界,它通过包含文字的子类型以及隐式转换在使用点可用的那些来松开<:约束。

因此,所有你需要做的是改变你的SomeClass这样:

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

...,当然,一定要使用类转换是可用的。这意味着你将需要在转换implicit关键字:

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

对不起,我觉得这不是在我的岗位清楚,但我不能改变的'类SomeClass的定义[A <:AA ,B <:BB](val someParameter:String)'。这就是我所说的“我想用这种方式使用类:'val myInstanceOfSomeClass = SomeClass [C,D]'。我正在编辑这个问题。 – user3485809

+0

然后你运气不好,必须明确地应用转换(当然这不需要是一个“隐含的”) –

+0

嗯......我想我可以让它成为......不管怎样,谢谢!我应该接受你的回答吗? – user3485809