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

时间:2015-06-16 16:08:33

标签: 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 ?????> {
}

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

1 个答案:

答案 0 :(得分:2)

我很确定在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位是具有细化的结构类型(据我记得,它被称为这样)。除了斯卡拉之外我还不懂任何其他语言。