首页 > 解决方案 > Java 8 error compiling code to add node in linklist but runs correctly in Java 15

问题描述

Here's the function to add node in singly link list. It is getting executed on Java 15, but for Java 8 it shows the compilation error.

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;
}

Here's the link for whole problem statement: https://www.hackerrank.com/challenges/insert-a-node-at-a-specific-position-in-a-linked-list/problem

This is the error:

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

What is the reason for this error?

标签: java

解决方案


Java 8 中第一个编译错误的原因是在 Java 15 之前的内部类中不允许使用静态方法。作为支持record类更改的一部分,该限制已被删除。(有关一些背景信息,请参阅为什么在 Java 16 的非静态内部类中允许使用静态方法?)。

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

Java 8 可移植性的最简单解决方案是static从该方法中删除修饰符。(将Result类声明为static可能的替代方案......)


推荐阅读