Klasy wewnętrzne i referencje

0

Witam, mam problem z następującym programem:

interface U {
	
	void metoda(int a);
	void metoda1(int a);
	void metoda2(int a);
}

class A {
	
	U produkuj() {
		return new U() {
			
			public void metoda(int a) {
				System.out.println("Metoda" + a);
			}
			
			public void metoda1(int a) {
				System.out.println("Metoda1" + a);
			}
			
			public void metoda2(int a) {
				System.out.println("Metoda2"+ a);
			}
		};
	}
}

class B {
	
	U[] tab;
	int i = 0;
	
	void accept(U x) {
		
		tab[i] = x;
		i++;
	}
	
	void ustaw(U[] x) {
		
		x = null;
	}
	
	void wywolaj() {
		
		int i = 0;
		while(i < tab.length) {
			
			if (tab[i] == null) 
				continue;
			
			tab[i].metoda(i);
			tab[i].metoda1(i);
			tab[i].metoda2(i);
		}
	}
}

public class Glowna {
	

	public static void main(String[] args) {

		A i = new A();
		A i1 = new A();
		A i2 = new A();
		A i3 = new A();
		
		B obiekt = new B();
		
		obiekt.accept(i.produkuj());
		obiekt.accept(i1.produkuj());
		obiekt.accept(i2.produkuj());
		obiekt.accept(i3.produkuj());
	}
	
}

Chcę aby metoda accept przypisała w tablicy tab referencję U. Mam to zrobić za pomocą anonimowych klas wewnętrznych stąd ta dziwna metoda produkuj. Jednak wywołanie metody accept kończy się błędem Null pointer exception. Czemu tak się dzieje? Wydaje mi się, że jako argument ta metoda pobiera referencję do U zwróconą przez metodę produkuj();

1

A w którym miejscu tworzysz tablicę tab?

0

Dokładnie, tab jest niezainicjalizowana - dopisanie konstruktora, definicja w miejscu deklaracji lub blok inicjalizacji egzemplarza załatwią sprawę. Składowej i nie musisz nadawać zera, oczywiście poprawnie, że to zrobiłeś i tak powinno być, jednakże w ramach ciekawostki przypomnę, że Java składowym automatycznie nadaje wartość 0 lub odpowiadającą ^^

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