Как установить значение при наличии нескольких классов java bean

У меня есть три класса модели MyApp, Product и ProductDetails. Я пытаюсь установить значение в ProductDetails, но получаю исключение с нулевым указателем. Может ли кто-нибудь помочь мне, что я делаю здесь не так:

MyApp.java

public class MyApp {

    private Product product;

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

}

Product.java

public class Product {

    private ProductDetails details;

    public ProductDetails getDetails() {
        return details;
    }

    public void setDetails(ProductDetails details) {
        this.details = details;
    }

}

ProductDetails.java

public class ProductDetails {

    private String productName;

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {

        this.productName = productName;
    }

}

Test.java

public class Test {

    public static void main(String[] args) {
        MyApp m = new MyApp();
        m.getProduct().getDetails().setProductName("testProduct");
        System.out.println("Name : " + m.getProduct().getDetails().getProductName());

    }

}

Я получаю исключение ниже: Исключение в потоке "main" java.lang.NullPointerExceptio в Test.main (Test.java:7)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
224
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перед использованием необходимо инициализировать product.details и details.productName. Например:

m.getProduct().setDetails(new ProductDetails());
m.getProduct().getDetails().setProductName(...);

А что насчет продукта в переменной m?

Это верно. Хотя для этого варианта использования было бы более полезно создавать экземпляры в конструкторах.

D. McDermott 22.11.2018 23:14

Да, это можно сделать несколькими способами. Это был лишь один пример того, как можно решить проблему.

Donat 23.11.2018 12:13

Другие вопросы по теме