我正在尝试实现参数多态来下载具有使用asInstanceOf[]
的大小写匹配语句的函数。我需要将参数类型与接受参数的项目的另一个包中的类相匹配。我试过这段代码:
def abc[A](x: A, i: Int): Any =
{
x(i)
}
在运行时,我收到错误A does not take parameters
。如何将A
与project1.package1
文件夹中的几个类匹配?这些类类似于Array / Vector和x(i)
返回i
元素。每个类采用不同的数据类型(如Int,Double,String等)。
答案 0 :(得分:3)
如果类接受参数,则可能是Function1
的子类型。不幸的是并非所有
所以你可以写:
def abc[A <: Function1[Int, _]](x: A, i: Int): Any = {
x(i)
}
但这对于带有参数的所有对象都不起作用,例如案例类伴随对象。因此,为了解决这个问题,您可以使用结构类型。类似的东西:
def abc[A <: {def apply(i: Int): Any } ](x: A, i: Int): Any = {
x(i)
}
基本上我们在这里做的是接受任何类型的子类型,其apply
方法带有Int
,即它需要Int
个参数。
应该注意的是,如果您尝试将输入类型从Int
推广到任意T