我有一个带有类型参数的抽象类,很少有它的实现:
abstract class AbstractClass[T] {
def func: T
}
class DoubleClass extends AbstractClass[Double]{
def func = 0.0
}
Run Code Online (Sandbox Code Playgroud)
然后我想创建一个需要一些这样的对象序列的函数:
def someFunc(objs: Iterable[AbstractClass]) = objs.foreach(obj=>println(obj.func))
Run Code Online (Sandbox Code Playgroud)
但它说"Class AbstractClass采用类型参数"
我是斯卡拉的新手,肯定做错了什么,但我不知道是什么
在大多数情况下应该是def someFunc[A](objs: Iterable[AbstractClass[A]]).特别是,这允许返回类型依赖于A例如
def someFunc[A](objs: Iterable[AbstractClass[A]]) = objs.map(_.func)
Run Code Online (Sandbox Code Playgroud)
回报Iterable[A].
有时您可能希望允许混合AbstractClass使用不同的参数.例如,在您的示例中,您只需打印func即可完成.在这种情况下,正如Sascha Kolberg的回答所说,使用通配符:
def someFunc(objs: Iterable[AbstractClass[_]])
Run Code Online (Sandbox Code Playgroud)
但如果您发现自己经常使用通配符,请考虑重新考虑您的设计.
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |