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