在Java中使用类型别名调用Scala Aux trait

时间:2018-02-16 09:48:29

标签: java scala

我在Scala中定义了这个Holder对象,如下所示:

trait Holder {
  type L
} 

object Holder {
  type Aux[L0] = Holder {type L = L0}
  } 

Scala中的类型为Holder.Aux[L]。我想在Java中引用这种类型,例如在方法调用中,但不确定语法是什么。

1 个答案:

答案 0 :(得分:1)

正如其他地方所解释的那样,Java在Scala的意义上并没有type

如果您需要Java互操作(关于Holder中使用的具体类型),坚持使用类型参数可能对您有用:

trait Holder[LType] {
  type L = LType
}

object Holder extends Holder[L0]

稍微扩展一下,如果L0是String,你可以这样做:

trait IHolder[LType] {
  type L = LType
  def l: LType
}

object Holder extends IHolder[String] {
  override val l: L = "foo" //this typechecks
}

然后,从Java开始,您可以:

IHolder<String> holder = Holder$.MODULE$;
String foo = holder.l();

//or, skipping IHolder:
String foo = Holder.l();

请注意,我重命名了trait,以便从Java代码中明确地调用Holder.l()引用object