在Scala中指定泛型类型参数

时间:2017-07-04 03:23:14

标签: scala types

我是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]]的泛型类型参数?

3 个答案:

答案 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)