Home > Enterprise >  Got an error message: error: 'void' type not allowed here
Got an error message: error: 'void' type not allowed here

Time:09-11

First I have a class and the class has a void method:

class IntGroup {
        int size;
        List<int[]> intervals;
        public IntGroup() {
            this.size = 0;
            this.intervals = new ArrayList<>();
        }
        
        public void addInt(int[] interval) {
            this.intervals.add(interval);
            this.size  ;
        }
    }

Then when I try to create a List, create a new object and call the method

// int[][] intervals
List<IntGroup> list = new ArrayList<>();
list.add(new IntGroup().addInt(intervals[0]));

I got error message error: 'void' type not allowed here list.add(new IntGroup().addInt(intervals[0]));. I tried to change the return type of addInt to List and int, neither worked.

CodePudding user response:

You're calling list.add with "whatever is returned from the addInt method"... but the addInt method is declared with a void return type... it doesn't return anything, so you can't use the return value.

Two options to fix this:

1) Change addInt to return IntGroup:

public IntGroup addInt(int[] interval) {
    this.intervals.add(interval);
    this.size  ;
    return this;
}

At this point, the existing list.add call is valid, because addInt returns an IntGroup - the same reference it was called on.

This is a reasonably common pattern in some APIs, such as StringBuilder, but it's not clear that it's appropriate here.

2) Separate out the list.add call from the addInt call

Just use a local variable to "remember" the group you're working with:

IntGroup group = new IntGroup();
group.add(intervals[0]);
list.add(group);

CodePudding user response:

addInt Returns void and you try to add it to the list:

new IntGroup().addInt(intervals[0]); <-- this is a void because addInt returns void

Try this instead:

// int[][] intervals
List<IntGroup> list = new ArrayList<>();
IntGroup intGroup = new IntGroup();
intGroup.addInt(intervals[0]);
list.add(intGroup);
  •  Tags:  
  • java
  • Related