Interfejs w klasie [Java]

0

Witam
Ostatnio spotkałem się z zapisem gdzie interfejs został utworzony wewnątrz klasy. Interfejs ten posiadał metodę której ta klasy już nie mogła zaimplementować ponieważ klasa ta nie mogła implementować tego interfejsu. Aby zaimplementować tę metodę musiałem w mainie stworzyć klasę anonimową w której mogłem napisać ciało tej metody. Czy mógłby ktoś wyjaśnić w jakich celach używa się takich rozwiązań, do czego to sie przydaje ? Czy w ten sposób tworzy się zdarzenia w java i czy to jedyna droga ?

Podrzucam kod

KLASA

package pl;



public class Car implements IAccelerate{
	

	private int speed;
	
	public Car (int speed){
		this.speed=speed;	
	}
	
	ICallback callback; 
	
	@Override
	public void changeSpeed(int speed) {
		
		this.speed=speed;
		
		if (callback != null)
			callback.onSpeedChanged();
		
	}

	                                   
	public void setCallback(ICallback callback) {
		this.callback = callback;
	}
	
	public interface ICallback {
		void onSpeedChanged();

	
	}

}

MAIN

package pl;

public class Main {

	public static void main(String[] args) {
		
		
		Car obiekt1 = new Car(100);
		obiekt1.setCallback(new Car.ICallback() {
			
			@Override
			public void onSpeedChanged() {
			System.out.println("zmieniles predkosc");
				
			}
			});
			
		   
		
		
		obiekt1.changeSpeed(111);
		

	}

}
0

I co? Chciałbyś żeby klasa Car implementowała ICallback? Masz ty rozum i godność człowieka?. Można to jak najbardziej zrobić, ale będzie to brzydkie i złe rozwiązanie i dobrze że ci się nie udało.

0

@Lua tak trudno wpisać w interent callback i zobaczyć po co to jest. albo spróbuj GWT tam masz trochę callbacków. możesz sobie lambdą ustawić / zrobić anonimową / klasę która zaimplementuje callback i on się wykona jak samochód zmieni prędkość. btw czy nazywanie interfejsów via INazwa coś daje?

0

@Shalom Proszę Cie weź poprawkę na to że post umieściłem w dziale newbie co świadczy o tym że dopiero zgłebiam składnie i prawa rządzące javą. Ty natomiast nie pomogłeś mi zrozumieć nic tylko uświadomiłeś mi że tak nie można co wcześniej podpowiedział mi już sam kompilator... a ja smutny zostałem dalej z moim problemem :P

2

Nie rób klas "człowiek-orkiestra". Nigdy. Jak jakaś klasa jest obiektem domenowym to nie jest callbackiem. Callback to jest funkcja wywoływana kiedy zajdzie jakiś specjalny warunek. Np. samochód się rozwali i wtedy wołany jest callback. Nie bój sie tworzyć wielu małych klas.
Idea callbacka jest taka żeby robić coś asynchronicznie. Tzn nie musisz cały czas gdzieś sprawdzać z poziomu samochodu czy coś się stało, tylko jak sie stanie to ktoś cię poinformuje odpalając callback.

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