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