java - scala 中的 ListNode 实现

标签 java scala scala-collections

嗨,我是 Scala 的新手,想知道如何将一个简单的 ListNode 类从 Java 重写为 Scala。

在java中,如下所示,我可以创建一个头节点head = new ListNode(0),然后设置head.next = new ListNode(1)>

// Java code
public class ListNode {
    public int val;       // data stored in this node
    public ListNode next;  // link to next node in the list

    public ListNode(int data) {
        this.val = data;
    }
}

但是我发现在Scala中很难重写相同的逻辑,下面是ListNode的案例类

// Scala code
case class ListNode[T](vl: T, nt: ListNode[T]) {
    def value: T = vl
    def next: ListNode[T] = nt
}

当我尝试实例化一个头节点,并实例化另一个新节点并将 head.next 设置为它时,它失败了:

scala> val head = ListNode(1, Nil)
<console>:9: error: type mismatch;
 found   : scala.collection.immutable.Nil.type
 required: ListNode[?]
       val head = ListNode(1, Nil)

我正在考虑将“下一个列表节点”放入 Option[] 中,以处理 null 情况,但它似乎变得越来越复杂......在 Scala 中是否有一种简单而正确的方法来做到这一点?

非常感谢。

最佳答案

您正在混合特征定义和实际值。我认为您需要的 scala 代码只是:

case class ListNode[T](value: T, next: ListNode[T] = null)

根据用例,您可能需要将 next 更改为 Option[ListNode[T]] 和/或将其定义为 var next 如果你希望它是可变的。

关于java - scala 中的 ListNode 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34342379/

相关文章:

scala - 为什么 Scala 的 Try 没有异常类型的类型参数?

scala - 根据 A 成员将 List[A] 转换为 List[Option[A]]

java - 带有 UV 贴图的 OpenGL-ES 纹理加载问题

java - 如何获取字符串的第一个字符

java - 选择要使用的根 DNS 服务器

scala - 根据谓词拆分器将对象列表拆分为不同的列表

scala - 有没有办法在 Scala 中创建通用类型的实例而不是反射

Java正则表达式跳过一些字符只匹配一次出现的数字,间歇句点

java - 为什么 Intellij Idea 建议在使用循环将数组转换为 Set 时创建中间列表?

scala - 如何 "hold form submission"并在Play Framework中进行身份验证