Odwołanie się do obiektu klasy

Odwołanie się do obiektu klasy
JA
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:16
0

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

Kopiuj
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.

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:13 minut
  • Postów:6694
0

Czy gdzieś tworzysz obiekt typu Car?

Twój searchC zwraca wynik metody searchC obiektu car.


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
RO
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:28
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
JA
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:16
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.

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:13 minut
  • Postów:6694
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
JA
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:16
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.

RO
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:28
0

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

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:13 minut
  • Postów:6694
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
JA
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:16
0

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

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:13 minut
  • Postów:6694
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
JA
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:16
1

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

P1
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:15
0

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

Spine
tylko, że na chama musi wprowadzić wtedy też argumenty konstruktora :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.