Шаблон построителя в эффективной Java

Недавно я начал читать «Эффективную Java» Джошуа Блоха. Мне очень интересна идея паттерна Строитель [пункт 2 в книге]. Я пытался реализовать это в своем проекте, но были ошибки компиляции. По сути, я пытался сделать следующее:

Класс с несколькими атрибутами и его класс построителя:

public class NutritionalFacts {
    private int sodium;
    private int fat;
    private int carbo;

    public class Builder {
        private int sodium;
        private int fat;
        private int carbo;

        public Builder(int s) {
            this.sodium = s;
        }

        public Builder fat(int f) {
            this.fat = f;
            return this;
        }

        public Builder carbo(int c) {
            this.carbo = c;
            return this;
        }

        public NutritionalFacts build() {
            return new NutritionalFacts(this);
        }
    }

    private NutritionalFacts(Builder b) {
        this.sodium = b.sodium;
        this.fat = b.fat;
        this.carbo = b.carbo;
    }
}

Класс, в котором я пытаюсь использовать указанный выше класс:

public class Main {
    public static void main(String args[]) {
        NutritionalFacts n = 
            new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
    }
}

Я получаю следующую ошибку компилятора:

включающий экземпляр, содержащий Мне очень интересна идея паттерна Строитель [пункт 2 в книге]. Я попытался реализовать это в своем проекте, но были ...

Недавно я начал читать «Эффективную Java» Джошуа Блоха. Мне очень интересна идея паттерна Строитель [пункт 2 в книге]. Я пытался реализовать это в своем проекте, но были ошибки компиляции. По сути, я пытался сделать следующее:

Класс с несколькими атрибутами и его класс построителя:

public class NutritionalFacts {
    private int sodium;
    private int fat;
    private int carbo;

    public class Builder {
        private int sodium;
        private int fat;
        private int carbo;

        public Builder(int s) {
            this.sodium = s;
        }

        public Builder fat(int f) {
            this.fat = f;
            return this;
        }

        public Builder carbo(int c) {
            this.carbo = c;
            return this;
        }

        public NutritionalFacts build() {
            return new NutritionalFacts(this);
        }
    }

    private NutritionalFacts(Builder b) {
        this.sodium = b.sodium;
        this.fat = b.fat;
        this.carbo = b.carbo;
    }
}

Класс, в котором я пытаюсь использовать указанный выше класс:

public class Main {
    public static void main(String args[]) {
        NutritionalFacts n = 
            new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
    }
}

Я получаю следующую ошибку компилятора:

включающий экземпляр, содержащий Мне очень интересна идея паттерна Строитель [пункт 2 в книге]. Я попытался реализовать это в своем проекте, но были ...

Недавно я начал читать «Эффективную Java» Джошуа Блоха. Мне очень интересна идея паттерна Строитель [пункт 2 в книге]. Я пытался реализовать это в своем проекте, но были ошибки компиляции. По сути, я пытался сделать следующее:

Класс с несколькими атрибутами и его класс построителя:

public class NutritionalFacts {
    private int sodium;
    private int fat;
    private int carbo;

    public class Builder {
        private int sodium;
        private int fat;
        private int carbo;

        public Builder(int s) {
            this.sodium = s;
        }

        public Builder fat(int f) {
            this.fat = f;
            return this;
        }

        public Builder carbo(int c) {
            this.carbo = c;
            return this;
        }

        public NutritionalFacts build() {
            return new NutritionalFacts(this);
        }
    }

    private NutritionalFacts(Builder b) {
        this.sodium = b.sodium;
        this.fat = b.fat;
        this.carbo = b.carbo;
    }
}

Класс, в котором я пытаюсь использовать указанный выше класс:

public class Main {
    public static void main(String args[]) {
        NutritionalFacts n = 
            new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
    }
}

Я получаю следующую ошибку компилятора:

включающий экземпляр, содержащий Я пытался реализовать это в своем проекте, но были ошибки компиляции. По сути, я пытался сделать следующее:

Класс с несколькими атрибутами и его класс построителя:

public class NutritionalFacts {
    private int sodium;
    private int fat;
    private int carbo;

    public class Builder {
        private int sodium;
        private int fat;
        private int carbo;

        public Builder(int s) {
            this.sodium = s;
        }

        public Builder fat(int f) {
            this.fat = f;
            return this;
        }

        public Builder carbo(int c) {
            this.carbo = c;
            return this;
        }

        public NutritionalFacts build() {
            return new NutritionalFacts(this);
        }
    }

    private NutritionalFacts(Builder b) {
        this.sodium = b.sodium;
        this.fat = b.fat;
        this.carbo = b.carbo;
    }
}

Класс, в котором я пытаюсь использовать указанный выше класс:

public class Main {
    public static void main(String args[]) {
        NutritionalFacts n = 
            new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
    }
}

Я получаю следующую ошибку компилятора:

включающий экземпляр, содержащий Я пытался реализовать это в своем проекте, но были ошибки компиляции. По сути, я пытался сделать следующее:

Класс с несколькими атрибутами и его класс построителя:

public class NutritionalFacts {
    private int sodium;
    private int fat;
    private int carbo;

    public class Builder {
        private int sodium;
        private int fat;
        private int carbo;

        public Builder(int s) {
            this.sodium = s;
        }

        public Builder fat(int f) {
            this.fat = f;
            return this;
        }

        public Builder carbo(int c) {
            this.carbo = c;
            return this;
        }

        public NutritionalFacts build() {
            return new NutritionalFacts(this);
        }
    }

    private NutritionalFacts(Builder b) {
        this.sodium = b.sodium;
        this.fat = b.fat;
        this.carbo = b.carbo;
    }
}

Класс, в котором я пытаюсь использовать указанный выше класс:

public class Main {
    public static void main(String args[]) {
        NutritionalFacts n = 
            new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
    }
}

Я получаю следующую ошибку компилятора:

включающий экземпляр, содержащий Effectivejava.BuilderPattern.NutritionalFacts.Builder требуется Пищевая ценность n = новое NutritionalFacts.Builder (10) .carbo (23) .fat (1) .build ();

Я не понимаю, что означает это сообщение. Пожалуйста, объясни. Приведенный выше код похож на пример, предложенный Блохом в его книге.

136
задан Adam Liss 15 April 2013 в 15:33
поделиться