Próbuję dowiedzieć się, jak uzyskać generics, aby przeskoczyć przez obręcze.Generics Puzzler
mam:
interface Root { }
interface Middle extends Root { }
class Type implements Root { }
I wiele "podtyp" klas:
class Subtype1 extends Type implements Middle { }
class Subtype2 extends Type implements Middle { }
...
Co chcę jest zadeklarować klasę z dwoma parametrami typu T
i S
, gdzie T
jest związane Type
i S
jest związany przez T
i Middle
.
Nie widzę sposobu na generyczne, aby zapewnić, że S
rozszerza się o T
I implementuje Middle
. Co chcę jest coś takiego:
class Handler<T extends Root, S extends T, S extends Middle>;
lub
class Handler<T extends Root, S extends <T extends Middle>>;
Ale oczywiście nie są legalne. Może brakuje mi magii?
Nie możesz tego zrobić. Możesz mieć wiele ograniczeń, ale muszą to być 0-1 Klasa plus wiele interfejsów. Nie możesz mieć typu ogólnego w sytuacji z wieloma powiązaniami. Podejrzewam, że to ograniczenie zostało zachowane, ponieważ pozwalanie na wpisanie wielu ograniczeń spowodowałoby wiele komplikacji w sprawdzaniu składni, co jest rzadkim przypadkiem. – BevynQ
powiązane: http://stackoverflow.com/a/13261667/697449 –
Dzięki. To była też moja lektura, ale doszedłem do wniosku, że możliwe jest, że czegoś mi brakuje w specyfikacji. To jest Casts! –