我在 Scala 中定义了这个 Holder
对象,如下所示:
trait Holder {
type L
}
object Holder {
type Aux[L0] = Holder {type L = L0}
}
Scala 中的类型为 Holder.Aux[L]
。我想在 Java 中引用此类型,例如在方法调用中,但不确定语法是什么。
最佳答案
正如其他地方所解释的,Java 没有 Scala 那样的类型
。
如果您需要 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()
明确引用对象
。
关于java - 在 Java 中使用类型别名调用 Scala Aux 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48823995/