这个问题是关于使用泛型类型和设置界限,所以请不要因为我使用的库而吓坏了。以此为例。
我使用Scalala并使用此类型DenseMatrix[V]
,DenseVectorCol[V]
和DenseVectorRow[V]
。它们的常见超类型是Tensor[K,V]
。请注意,Tensor
还有其他参数K
- 所有提及的类Dense...
都会自行设置此类型K
。
所以我想编写一个带有参数的方法,其中上层类型为Tensor
。我为我的方法编写了这样的代码:
def validate[K,T <: Tensor[K,Double]](tensor : T) : T = ...
有这样的意图 - T
必须是Tensor
的子类型,我知道我一直在使用Double
,所以让它为Double
,对于第一个类型的参数(K
),从传递的参数中获取它。
它无法正常工作,因为我收到错误:
推断类型参数[Nothing,DenseVectorCol [Double]]不符合方法validate的类型参数bounds [K,T&lt;:Tensor [K,Double]]
问题:那么如何从传递的参数中提取此类型K
?
答案 0 :(得分:2)
如果您根本不关心K
,可以使用通配符:
def validate[T <: Tensor[_, Double]]: T = ...
请注意,在某些情况下,这不起作用(例如,如果您需要返回K
或以其他方式在方法中使用它),但假设这不是其中一种情况,则这是一个完全有效的解决方案和类型推断将很好。