下面是在单链表中添加节点的函数。它在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
可能是另一种选择…)