1
消除返回类型考虑下面的Scala代码片段:通过擦除斯卡拉
def func(param: Any): Int = param match {
case f: (String => Int) => f("apple")
case i: Int => i
}
println(func((s: String) => s.length))
正常工作,但是,在编译时,我得到以下警告:
<console>:11: warning: non-variable type argument String in type pattern String => Int is unchecked since it is eliminated by erasure
case f: (String => Int) => f("apple")
我怎样才能摆脱此警告讯息?
感谢您的帮助提前!
感谢您的解释和链接!我试图解决警告但失败。现在我对'TypeTag'的含义有了一个理论上的认识,而且我知道'case f:((_)=>(_))=>'不会抱怨。但是,在后一种情况下,'f(...)'会导致编译器错误。请您这么友好地给我一些进一步的提示如何继续?谢谢! –
用代码片段更新。 – yw3410
感谢您的解释性代码!它确实更精确,因为我们现在可以区分String => Int和Int => String。我已经尝试过了,但不幸的是现在有两次同样的警告。 我尝试了以下方法:'type oneParamFuncType = _ => _',并且在两种情况下都使用'case f:oneParamFuncType ...',但是,这会导致函数调用时发生编译器错误。如果没有函数调用,编译器会很高兴。你有没有想法如何将通用'oneParamFuncType'转换为特定的? –