Odwołanie się do obiektu klasy

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.

0

Czy gdzieś tworzysz obiekt typu Car?

Twój searchC zwraca wynik metody searchC obiektu car.

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()]

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.

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.

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.

0

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

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.

0

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

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.

1

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

0

zawsze mozesz na chama robic new nazwaKlasy().nazwaMetody ;]

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