Как инициализировать объект java

Есть класс Bottle, в нём создан конструктор Bottle, в конструкторе нужно передать созданный внутри конструктора массив в объект SparklingWater water для того, чтобы массив использовать в другом классе и методе (в методе pump). Как бы я не инициализировал объект - когда компилятор доходит до water.pump(this.bobbles) - падает ошибка "nullPointerException" из-за того, что water: null.

  1. Как в данном классе правильно инициализировать объект water? 2.Нужно ли при создании конструктора Bottle указывать параметр SparklingWater water?
public class Bottle {
    private double volume;
    private SparklingWater water;
    public Bubble[] bobbles;

    public Bottle(double volume) throws InterruptedException {

        Bubble[] bobbles = new Bubble[(int) (volume * 10000)];//заполнилось массивом пузырьков из расчёта объёма
        this.bobbles = bobbles;
        
        //тут проблема
        setWater(water);
        this.water = water;
        water.pump(this.bobbles);
    }
    
    public void open() {
        this.water.setOpened(true);
        //System.out.printf(" Set water statement to 'open' ").println();
    }

    public void warm(int temperature) {
        temperature = 40;
        //System.out.printf(" Warming water to %s", temperature).println();
    }

    public SparklingWater getWater() {
        return  this.water;
        //System.out.printf(" Getting 'Water' object");
    }

    public void setWater(SparklingWater water) {
        this.water = water;
        //System.out.print(" Add new 'water' object ");
    }
}

Ответы (1 шт):

Автор решения: Анастасия

В конструктор Bottle конечно нужно передать объект SparklingWater water, если он там используется, иначе откуда этой water там взяться? И раз уж среди полей класса есть volume, то желательно его тоже инициализировать в конструкторе. Или удалить из списка полей, если он дальше нигде не используется.

public Bottle(double volume, SparklingWater water){
        this.volume = volume; // так или удалить из списка полей
        Bubble[] bobbles = new Bubble[(int) (volume * 10000)];
        this.bobbles = bobbles;
        this.water = water;
        water.pump(this.bobbles);
}

Тогда, вызывая конструктор Bottle, Вам нужно передать два аргумента: volume типа double и water типа SparklingWater.

→ Ссылка