我在Scala中定义了这个Holder
对象,如下所示:
trait Holder {
type L
}
object Holder {
type Aux[L0] = Holder {type L = L0}
}
Scala中的类型为Holder.Aux[L]
。我想在Java中引用这种类型,例如在方法调用中,但不确定语法是什么。
答案 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
。