2013-03-08 4 views
8

Od Angelika Langer's generic FAQ:Co to jest lewa granica dla typu ogólnego lub metody i dlaczego wybrano tę zasadę do wymazywania typu?

Parametry typu elidującego.

Kiedy kompilator znajdzie definicji generycznego typu lub metody, to usuwa wszystkie wystąpienia parametrów typu i zastępuje je ich od lewej związana, lub typ obiektu, jeśli nie wiąże została określona.

Edit: Jak to rozumieć w tym przypadku od lewej związany znaczy, co znaczy dosłownie tj najdalej w lewo w liście granicami. Chcę zrozumieć, dlaczego wybrano tę politykę?

+2

Najbardziej liberalne; to jest typ, którym mogą być wszystkie parametry. –

+1

http://stackoverflow.com/questions/7075363/definition-of-type-variable-and-parameter – NPE

Odpowiedz

9

W tym przypadku "leftmost" nie jest terminologią techniczną. Dosłownie oznacza "najdalej w lewo". Oznacza to po prostu, że gdy parametr typ ma kilka granic (ograniczenia) tak:

T extends Callable<Long> & Runnable 

kompilator zastępuje wszystkie wystąpień parametru typu T ze związanym czyli najdalej w lewo (w tym przypadku, który jest Callable<Long>) :

ten sposób, jak w przykładzie Angelika, to:

private T task1, task2; 

zastępuje się następująco:

private Callable task1, task2; 
+0

dlaczego wybrali "najdalszą od lewej polityki"? – Geek

+0

Nie jest "najdalej od lewej", jest "najdalej na lewo", i nie wiedziałbym, dlaczego to zrobili, ale zakładam, że jednym z powodów jest to, że gdy jest zaangażowana klasa, to musi być ona wymieniona jako pierwsza, więc ta lewa reguła automatycznie wybierałaby tę. – JLRishe

+1

Innym powodem wyboru skrajnej lewej strony jest sprawienie, aby wybór był dobrze zdefiniowany, aby użytkownik miał kontrolę nad typem używanym w usuwanej klasie. Chcesz tego, abyś mógł tworzyć klasy, które będą kompatybilne wstecz ze starym kodem. Jeśli chcesz, aby klasa "surowa" usunęła dany typ lub usunęła metodę ogólną, aby mieć określony typ argumentu, możesz to kontrolować, wybierając oprawkę. –

2

Nie ma powodu. Wystarczy wybrać jeden. Cała sprawa jest do bani. To tak, jakby zapytać, które z twoich dzieci chcesz ocalić. Chcesz zachować wszystko, duh. Ale ci nie pozwalają.

+0

+1 za humor :) –

Powiązane problemy