Próbowałem szukać odpowiedzi w odmentach internetu, ale nie wiem do końca jak poprawnie sformułować pytanie. Rozwiązuję zadanie, w którym mam interfejs Cache, który zawiera metodę z innego interfejsu: CacheItem. Dalej mam klasę, która implementuje interfejs Cache i zawiera metodę: CacheItem cacheItem(Object item, String key). Pytanie brzmi co i w jaki sposób powinna zwracać ta metoda? Teoretycznie powinna zwrócić obiekt, który jest takiego samego typu jak interfejs? Czy to jest normalan praktyka?
Może nieprecyzyjnie się wyraziłem i przeglądnięcie kodu pozwoli wam zrozumieć co chcę zrobić:
https://github.com/fmastale/SmartCacheImpl/blob/master/src/com/smartcache/impl/CacheImpl.java
A jaka ma być inna praktyka, i co miałoby innego zwracać oO? Jak jest metoda która zwraca np. java.util.List to zwraca obiekt implementujący liste, może to być LinkedList, ArrayList albo nawet anonimową klasę.
Słusznie - nie pomyślałem o tym w ten sposób. Dzięki za pomoc!
Masz literówkę:
@Override
public CacheItem catcheItem(Object item, String key) {
Zastosowany @Override sugeruje że w więcej niż jednym miejscu.
rzeczywiście! dzięki za czujność :)
W Javie jak nadpisujesz metody możesz też zwracać bardziej ogolny typ,
tzn jeśli typ A ma metodę Collection<T> getSomething(),a B dziedziczy/implementuje A to B może mieć np. List<T> getSomething()
ok, teraz już rozumiem - wcześniej miałem do czynienia z interfejsami, ale robiłem jakieś proste operacje, dlatego nie wydało mi się to ewidentne. jeszcze raz dzięki Twoje komentarze, scibi!