gpt4 book ai didi

java - 在 Java 中使用类型别名调用 Scala Aux 特征

转载 作者:行者123 更新时间:2023-12-02 11:37:32 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com