Scala 参数化选项类型
我知道选项是参数化的,即选项[T],但如何指定嵌套的参数化类型,例如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。如果希望该值不存在,可以使用以下方法
选项[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