Odwołanie się do obiektu klasy

Odpowiedz Nowy wątek
2018-05-27 18:59

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0

Witam. Tworząc projekt natknąłem się na dość poważny problem. A mianowicie nie mogę odwołać się do obiektu klasy.

public class Hire_firm {

    List<User>usertab = new ArrayList<User>();
    List<Vehicle>vehicleTab =new ArrayList<Vehicle>();
    User user;
    Car car;

public static void main(String[] args)throws IOException {
        // TODO Auto-generated method stub

        MainMenuFrame.main(null); 

    }
public String searchC(String Air_conditioning, String Body, String Gearbox)throws IOException{ //car

                    return car.serchC(Air_conditioning, Body, Gearbox, vehicleTab) ;
        }
}

Odwołując się w ten sposób pojawia się błąd "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException" Gdzie tkwi błąd? Z góry dzięki.

Pozostało 580 znaków

2018-05-27 20:15

Rejestracja: 16 lat temu

Ostatnio: 1 minuta temu

0

Czy gdzieś tworzysz obiekt typu Car?

Twój searchC zwraca wynik metody searchC obiektu car.

edytowany 1x, ostatnio: Spine, 2018-05-27 20:17

Pozostało 580 znaków

2018-05-27 21:52

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0

Zgłaszasz kolejny podobny błąd.
Jak piszesz i testujesz kod?
Korzystasz z Eclipse lub IntelliJ?

Ja w Eclipse sprawdzam kod tak:
po podświetleniu zmiennej zaznacza wszystkie wystąpienia konkretnej zmiennej - od deklaracji
po najechaniu kursorem wyświetla się typ i miejsce deklaracji
F3 na podświetlonej metodzie/zmiennej skacze do jej deklaracji
Ctrl+space po kropce otwiera listę dostępnych dla obiektu metod/zmiennych
Ctrl+Shift+F formatuje poprawnie zaznaczony fragment kodu - ustawia wcięcia
wstawiam fragmenty drukujące w istotnych punktach na konsolę problematyczne obiekty [@Override metody .toString()]

edytowany 1x, ostatnio: ronaldexim, 2018-05-27 22:34

Pozostało 580 znaków

2018-05-27 22:43

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0

Car jest nazwą klasy do której właśnie searchC przekazuje wynik właśnie do tej klasy i tam ma odbyć się reszta działania.
Tak korzystam z Eclipse i dzięki fajne skróty klawiszowe szczególnie ten z formowaniem kodu.
A co do testowania itd to ciężko jeszcze żeby jakoś się określić nie mam stałego sposobu bo dopiero zaczynam przygodę z programowaniem.

Pozostało 580 znaków

2018-05-27 22:53

Rejestracja: 16 lat temu

Ostatnio: 1 minuta temu

0
Jaksik napisał(a):

Car jest nazwą klasy do której właśnie searchC przekazuje wynik właśnie do tej klasy i tam ma odbyć się reszta działania.

No ale chyba widzisz, że w kodzie, który pokazałeś nie inicjujesz car w żaden sposób? Jest gdzieś new Car(); ? NullPointerException pojawia się właśnie w takich sytuacjach. Odwołujesz się do obiektu, który nie został stworzony.

edytowany 3x, ostatnio: Spine, 2018-05-27 22:55

Pozostało 580 znaków

2018-05-27 22:58

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0

Próbowałem go umieścić ale newCar() byłby konstruktorem z 11 argumentami które przyjmują wartości null oraz 0 przez co działanie w metodzie będącej już w klasie Car nie daje oczekiwanych rezultatów.

Pozostało 580 znaków

2018-05-27 23:02

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0

Masz do wyboru - stworzyć obiekt przez "new" albo zadeklarować metodę jako statyczną i używać jak np. String.

Pozostało 580 znaków

2018-05-27 23:39

Rejestracja: 16 lat temu

Ostatnio: 1 minuta temu

0

Nie będzie to ładne, ale możesz obiekt typu Car przekazać do obiektu typu Hire_firm. Nie musisz tworzyć Car wewnątrz Hire_firm. Możesz w Hire_firm dodać metodę setCar, która zrobi this.car = car;. Albo w ogóle zrób, żeby pole typu Car było publiczne i przypiszesz do tego pola utworzony zewnętrznie Car.

edytowany 1x, ostatnio: Spine, 2018-05-27 23:39

Pozostało 580 znaków

2018-05-28 14:30

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0

Wybacz ale nie za bardzo rozumiem co masz na myśli "przypiszesz utworzony zewnętrznie Car".

Pozostało 580 znaków

2018-05-28 15:04

Rejestracja: 16 lat temu

Ostatnio: 1 minuta temu

0

Gdzieś musisz stworzyć obiekt Car, jeśli chcesz używać jego niestatycznych metod.
W innej klasie możesz stworzyć obiekt Car i używać go w innych klasach. Po prostu trzeba go jakoś im przekazać.
Więc tworzysz w innej klasie Car myCar = new Car(arg1, arg2, ...); i potem wywołujesz hire_firmInstance.setCar(myCar);.
Tylko musisz to zrobić, zanim skorzystasz z metody searchC() obiektu hire_firmInstance.

Dlatego pisałem, że to brzydkie :D Jeśli tylko jest taka możliwość, to lepiej unikać takich zależności. Bo normalnie jak ktoś inny będzie chciał skorzystać z naszej klasy, to będzie potrzebował specjalnych instrukcji. Najlepiej wymagaj Car w konstruktorze klasy Hire_firm. Albo napisz kilka konstruktorów i bez argumentów będzie sobie sam tworzył Car i wywoła konstruktor przyjmujący Car.

edytowany 8x, ostatnio: Spine, 2018-05-28 15:12

Pozostało 580 znaków

2018-05-28 17:03

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

1

Dobra pomyśle co z tym zrobić i jak coś odezwę się dzięki wielkie :D

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: Googlebot