Java 8编译代码在链表中添加节点错误,但在Java 15中正常运行



下面是在单链表中添加节点的函数。它在Java 15上执行,但在Java 8上显示编译错误。

public static SinglyLinkedListNode insertNodeAtPosition(SinglyLinkedListNode llist, int data, int position) {
// Write your code here
SinglyLinkedListNode new_node = new SinglyLinkedListNode(data);
SinglyLinkedListNode curr_node = llist;

int i=0;
while(i<position-1)
{
curr_node = curr_node.next;
i++;
}
new_node.next = curr_node.next;
curr_node.next = new_node;

return llist;
}

这是整个问题声明的链接:https://www.hackerrank.com/challenges/insert-a-node-at-a-specific-position-in-a-linked-list/problem

错误:

Solution.java:78: error: Illegal static declaration in inner class Solution.Result
public static SinglyLinkedListNode insertNodeAtPosition(SinglyLinkedListNode llist, int data, int position) {
^
modifier 'static' is only allowed in constant variable declarations
Solution.java:121: error: cannot find symbol
SinglyLinkedListNode llist_head = insertNodeAtPosition(llist.head, data, position);
^
symbol:   method insertNodeAtPosition(SinglyLinkedListNode,int,int)
location: class Solution
2 errors
Exit Status
1

这个错误的原因是什么?

Java 8中出现第一个编译错误的原因是Java 15之前的内部类不允许使用静态方法。作为支持record类的更改的一部分,删除了该限制。(参见为什么Java 16中的非静态内部类允许使用静态方法?

第二个错误是第一个错误的结果。Java 8编译器拒绝了方法声明…然后不会将其解析为符号。

Java 8可移植性的最简单解决方案是从该方法中删除static修饰符。(将Result类声明为static可能是另一种选择…)

最新更新