Czytam i nie mogę zrozumieć dlaczego przy pisaniu metod powinienem bardzo ściśle określać jaki typ ma być zwracany przez metodę. Wręcz odwrotnie do sytuacji deklarowania typów parametrów jakie ma przyjmować metoda, ale to rozumiem, bo mam wtedy możliwość przekazania nie tylko konkretnie np ArrayList ale też mogę przesłać LinkedList, OK. Ale dlaczego odwrotnie jest z typami zwracanymi przez metodę?
Przykład z zaznaczonymi w kodzie miejscami, co bym stracił gdybym napisał ogólniej?
import java.util.*;
class ListUtils {
static void append(List list, Object[] items){
for (int i=0; i<items.length; i++)
list.add(items[i]);
}
static ArrayList create(Object[] items){ //TU co bym 'stracił' pisząc static List create(Object[] items)
ArrayList list = new ArrayList(); //TU co bym 'stracił' pisząc List list = new ArrayList(); Dlaczego pisać tak a nie inaczej?
append(list, items);
return list;
}
static void show(List list){
for (Iterator iter = list.iterator(); iter.hasNext();)
System.out.println(iter.next());
}
}
class Kolek{
public static void main(String[] args) {
String[] items = { "Kot", "Pies", "Slon", "Tygrys" };
List list1 = new ArrayList();
ListUtils.append(list1, items);
ListUtils.show(list1);
List list2 = ListUtils.create( new String[] { "Truskawki", "Banany" } );
ListUtils.show(list2);
}
}