我有以下两种方法:
def callAlpha = call[T](Constants.Alpha)(_: String)(_: T => T)
def call[T](symbol: String)(caller: String)(op: T => T)(implicit ct: ClassTag[T]): String = { // some code }
Eclipse抱怨在第一种方法中使用泛型,但在第二种方法中却没有。这是为什么?
答案 0 :(得分:3)
在第二种方法中,您包含一个类型参数定义([T]
,它紧跟在方法名称之后)。这声明了一个名为T
的类型参数(您可以根据需要对其进行命名),然后可以在方法的输入参数,输出类型和实现中使用它。
第一种方法缺少此定义 - 它尝试使用名为T
的类型而不声明这样的类型:方法名称(callAlpha
)后面没有类似的类型参数定义,因此方法主体(call[T](Constants.Alpha)(_: String)(_: T -> T)
)无法使用它。
修复可以很简单 - 也为第一种方法定义T
:
def callAlpha[T] = call[T](Constants.Alpha)(_: String)(_: T => T)
答案 1 :(得分:2)
因为在
def callAlpha = call[T](Constants.Alpha)(_: String)(_: T => T)
右侧有一个未绑定的类型变量T
。
你可能意味着:
def callAlpha[T] = call(Constants.Alpha)(_: String)(_: T => T)