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/