ten ma do czynienia z GWT-kompilatora, jak mówisz poprawnie. EDYCJA: Jednak, jak zauważył Daniel w komentarzu poniżej, nie dotyczy to ogólnie kompilatora gwt, ale tylko przy użyciu GWT-RPC.
Jeśli zadeklarujesz List zamiast ArrayList jako typ zwracany, to kompilator gwt będzie zawierał kompletną hierarchię List (tj. Wszystkie typy Lista wykonawcza) w skompilowanym kodzie. Jeśli użyjesz ArrayList, kompilator będzie musiał tylko uwzględnić hierarchię ArrayList (tj. Wszystkie typy implementujące ArrayList - która zwykle jest samą ArrayList). Za pomocą interfejsu zamiast konkretnej klasy zapłacisz karę w postaci czasu kompilacji i rozmiaru generowanego kodu (a tym samym ilość kodu, który każdy użytkownik musi pobrać podczas działania aplikacji).
Pytałeś także o przyczynę: jeśli używasz interfejsu (zamiast konkretnej klasy), kompilator nie wie, w czasie kompilacji, które implementacje tych interfejsów będą używane. Tym samym obejmuje wszystkie możliwe implementacje.
Odnośnie ostatniego pytania: wszystkie metody mogą zostać zadeklarowane, aby zwrócić interfejs (tak jest, prawda?). Powyższa kara obowiązuje.
A przy okazji: Jak rozumiem, problem ten nie ogranicza się do metod. Ma zastosowanie do wszystkich deklaracji typów: zmiennych, parametrów. Za każdym razem, gdy użyjesz interfejsu do zadeklarowania czegoś, kompilator będzie zawierał pełną hierarchię pod-interfejsów i klas implementujących. (Tak więc, jeśli zadeklarujesz swój własny interfejs tylko z jedną lub dwiema klasami implementacji, to nie poniesiesz dużej kary. W ten sposób używam interfejsów w GWT.)
W skrócie: używaj klas konkretnych, gdy tylko jest to możliwe. (. Mała sugestia: byłoby pomocne, jeśli dał się znacznik czasu, kiedy odnosi się do filmu)
Ma to związek z serializacją RPC. Zobacz http://stackoverflow.com/questions/3059787/gwt-using-listserializable-in-a-rpc-call –
Zobacz lub tuż po 7-minutowym punkcie prezentacji. Mówiący nie wie dokładnie, dlaczego to robi.Nazywa to "przesądem". –