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

标签 java scala

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

相关文章:

Java 计时器启动应用程序时出现问题

java - 将具体的 EnumMap 对象列表传递给通用 EnumMap 参数列表会导致编译错误

scala - 如果列表不为空则返回尾部或返回空列表

scala - State Monad 中使用 flatMap 的典型场景?

java - 如何去除Android中自定义对话框的白边?

java - 如何修复 ClassNotFoundException : org. apache.commons.logging.LogFactory?

java - 最轻量级的 Java 集合

scala - 如何在 Scala 中编写正确的空安全合并运算符?

java - 如何在 scala 上使用 Java API 创建 Elasticsearch 聚合

scala - 从 scala 将文档插入 mongodb 时出错