Scala 参数化选项类型

Scala 参数化选项类型,scala,Scala,我知道选项是参数化的,即选项[T],但如何指定嵌套的参数化类型,例如选项[Node[T]] 我有这个类定义 class Node[T <: Serializable] private(val path: String, val data: T, val parent: Option[Node[T]] = None) { ... } 但没有一个不接受参数 有什么想法吗?您的代码很好:只需在Some()中包装一个当前值即可选项可以表示为Some或None。如果希望该值不存在,可以使用以下方法

我知道选项是参数化的,即选项[T],但如何指定嵌套的参数化类型,例如
选项[Node[T]]

我有这个类定义

class Node[T <: Serializable] private(val path: String, val data: T, val parent: Option[Node[T]] = None) {
...
}
但没有一个不接受参数


有什么想法吗?

您的代码很好:只需在
Some()
中包装一个当前值即可<对于存在和不存在,代码>选项可以表示为
Some
None
。如果希望该值不存在,可以使用以下方法调用:

parent = None
None
不接受参数(因为它表示一个不存在的值),并且它也是一个对象,即只存在一个实例。但是它有一个类型参数
Nothing
,它是任何其他类型的子类型,因此它在需要
选项[Node[T]]
的地方工作得很好

如果您希望显示值,则必须将其包装在
Some
中,如下所示:

parent = Some(new Node[String]("/", "Test", None))

所以None总是None,没有参数,正如有人解释的那样

另一个陷阱是字符串不是Serializable的子类型,而是java.io.Serializable的子类型:

这很好:

scala> class Node[T <: java.io.Serializable ] (val path: String, val data: T, val parent: Option[Node[T]] = None) { }
defined class Node

scala> new Node("/", "")
res19: Node[String] = Node@4b520ea8
scala>类节点[T新节点(“/”,“”)
res19:节点[字符串]=Node@4b520ea8

在每种情况下,您会遇到什么样的确切错误?它可能会“阻塞”,因为构造函数是私有的,而不是因为类型错误。谢谢,我没有意识到Scala的Serializable与java.io.Serializable不同。我必须了解更多关于这方面的信息。。
scala> class Node[T <: java.io.Serializable ] (val path: String, val data: T, val parent: Option[Node[T]] = None) { }
defined class Node

scala> new Node("/", "")
res19: Node[String] = Node@4b520ea8