java - 这个 Scala 代码的 Java 等价物是什么?

标签 java scala

Scala 中这些特征的 Java 等价物是什么?

trait Visitor {
  type X
  type S<:Strategy
  type R[v<:Visitor] = (S{type X = Visitor.this.X;type V=v})#Y
}

trait Strategy {
  type V<:Visitor
  type X
  type Y
}

我将 Strategy 特性翻译成:

public interface Strategy<V extends Visitor<?, ?, ?>, X, Y> {

}

我尝试将特征 Visitor 翻译成:

public interface Visitor<X, S extends Strategy<?,?, ?>, R ?????> {
}

如您所见,我不知道如何理解/翻译 Visitor 特征中的 R 类型。什么是类似的 Java 等价物?

最佳答案

我很确定用 Java 写一个等价物是不可能的,它的类型系统不够复杂。 R[v <: Visitor]是一种更高级的泛型类型,它需要遵循以下原则:

interface Visitor<X, S extends Strategy<?, ?, ?>, R<? extends Visitor<?, ?, ?>> extends ...>

但这在 Java 中是不可能表达的,因为它在泛型中没有更高种类的类型。这甚至没有提到 (S{type X = Visitor.this.X;type V=v})#Y bit 是一种有细化的结构类型(我记得是这样叫的)。除了 Scala 之外,我不知道任何其他语言都有这样的东西。

关于java - 这个 Scala 代码的 Java 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872810/

相关文章:

java - 测试场景分离

java - 客户端通过服务器与特定客户端通信

java - 创建 jframe 时预置图像

scala - Json4s 'linq-style' 用于理解给出空列表

ScalaTest:在失败的 future 中断言异常(非阻塞)

java - CannotResolveClassException : com. blazemeter.jmeter.RandomCSVDataSetConfig

java - 在java中使用自定义对象模型构造谓词

scala - 如何使用scala编写命令行工具

scala - 具有最大元素的 Seq

使用设置为 null 的隐式 val 时,Scala 编译器的行为不符合预期