我是Scala的新手,并且使用Java编写通用方法:
public interface Context{
<T> Optional<T> get(String parameterName);
}
和Scala类:
class Mcls(ctx: Context){
val str = ctx.[Optional[String]]get("str").get //error
}
有没有办法在Scala中指定短于asInstanceOf[Optional[String]]
的泛型类型参数?
答案 0 :(得分:3)
val str: Optional[String] = ctx.get("str")
应该这样做。
val str = ctx.get[String]("str")
答案 1 :(得分:2)
asInstanceOf[Optional[String]]
是不正确的,即使它因类型擦除而发生工作。要直接指定参数,请编写
ctx.get[String]("str")
直接相当于Java中的ctx.<String> get("str")
。
答案 2 :(得分:1)
我认为你可以使用类型别名来缩短这一点,而且强制类型是不必要的。
type MY_TYPE = Optional[String]
val str: MY_TYPE = ctx.get("str") //it's unnecessary get in here, since the `get` method already return `MY_TYPE`, and specify type after variable, the compiler will auto infer the generic type for this.
println(str)