【发布时间】:2014-12-22 13:37:42
【问题描述】:
我有这个在 Rust 中声明 enum 的源代码,但我不明白。在 Java 中它的等价物是什么?
pub enum BoxType<'a> {
BlockNode(&'a StyledNode<'a>),
InlineNode(&'a StyledNode<'a>),
AnonymousBlock,
}
其中:BlockNode 和 InlineNode 是类。
编辑 在Ionuț G. Stan提供的答案范围内,如何使用他提出的代码来拥有以下代码的功能。
match self.box_type {
BlockNode(node) => node,
InlineNode(node) => node,
AnonymousBlock => panic!("Anonymous block box has no style node")
}
【问题讨论】:
-
请注意,Java 中没有行对行等效。此代码使用生命周期,这是 Java 不需要的功能,因为它是一种垃圾收集语言。
-
另一个问题实际上是 Java 中的枚举是枚举(命名常量的集合),而 Rust 中的枚举实际上是标记的联合,或者代数数据类型。虽然标记的联合可以很容易地表示普通的枚举,但反之则不然。在类 Java 语言中,ADT 通常使用类层次结构建模。