Как мне передать ссылку на класс из другого класса?

#java #class #nullpointerexception

#java #класс #исключение nullpointerexception

Вопрос:

Я создаю базовую программу для начинающих на Java, но я продолжаю получать ошибку NullPointerException и, похоже, не могу решить проблему.

У меня есть два класса — User и Cart.

Класс User включает класс Cart со следующим кодом :

 package eCommerceApp;

import java.util.List;
import java.util.Collections;
import java.util.Comparator;

public class User extends Person {

    public User(String name, String surname, int budget) {
        super(name, surname, budget);
    }

    public Cart myCart;

    public String getReceipt(List<Product> products) {

        int sum = 0;

        for (Product product : products) {

            sum  = product.getPrice();
        }
        return "Your total bill is "   sum   " rsd.";
    }

    public String getMostExpensiveItem(List<Product> products) {

        Product product = Collections.max(products, Comparator.comparing(s -> s.getPrice()));

        return "The most expensive item in your shopping cart is "   product.getName()   ".";

    }

    public String getCheapestItem(List<Product> products) {

        Product product = Collections.min(products, Comparator.comparing(s -> s.getPrice()));
        return "The cheapest item in your shopping cart is "   product.getName()   ".";

    }

}
  

И класс Cart :

 
import java.util.List;

public class Cart {

    List<Product> products;

    public Cart(List products) {

        this.products = products;
    }

    public String getProducts() {
        return this.products.toString();
    }

    public void setProducts(List products) {
        this.products = products;
    }

}
  

Теперь, когда я хочу установить список товаров в корзину моего пользователя, введя User.myCart.setProducts(список) в основном классе, я получаю ошибку NullPointerException. Как я могу это решить?

Ответ №1:

Чтобы использовать классы в других классах, вам нужно создать их экземпляр следующим образом:

 public Cart myCart = new Cart();
  

Если весь ваш класс не является статическим, то это правильный путь. Но, как правило, не рекомендуется постоянно делать ваши классы статичными.

Комментарии:

1. Но: вы не должны регулярно создавать классы, полные static методов , просто чтобы избежать необходимости создавать новые объекты. Создание новых объектов и связывание их вместе — это сама суть объектно-ориентированного программирования.

2. Да, я согласен. 1

3. Ответ правильный, но сильный намек на то, что «вы должны просто сделать вещи статичными», является таким плохим советом, за это нельзя проголосовать как есть.

4. Где должен выполняться вызов этого экземпляра? В пользовательском или основном классе моего приложения?

5. В данном случае, в вашем пользовательском классе.