wiem, że to możliwe, aby dodać wiele ograniczeń do ogólnej definicji klasy, np:Java Generic z 1 parametrem typu i 2 ograniczeń
class Example<I extends Object & Comparable<Object>>{}
ale chcę ogólnym (MyGeneric
), który bierze udział generycznych (SomeGeneric<T>
) jako jego parametr typu i aby ograniczyć parametr typu (T
) tego rodzaju (np. T extends SomeClass
).
Ważne, muszę wiedzieć, rodzaje i SomeClass
SomeGeneric
zarówno z wnętrza klasy (G
i T
potrzeby zarówno wiązać). Na przykład, wyobraź sobie coś takiego:
class MyGeneric<G extends SomeGeneric<T>, T extends SomeClass>
{
public G returnSomeGenericImpl(){}
public T returnSomeClassImpl(){}
}
pytanie: Powyższe działa, ale wolałbym, jeśli moja klasa miała tylko jeden parametr typu, aby ułatwić życie dla realizatorów mojej klasie. Czy jest sposób na zrobienie tego?
Coś takiego byłoby miło (ale ten konkretny kod jest nieprawidłowy):
class MyGeneric<G extends SomeGeneric<T extends SomeClass>>
{
public G returnSomeGenericImpl(){}
public T returnSomeClassImpl(){}
}
Gdybym nie było jasne, ja chętnie próbują wyjaśnić moje intencje.
Nie widzę, jak to mogłoby działać. Jeśli nigdy * nie podasz * konkretnego typu 'T', to jak powinien go odgadnąć kompilator? Jeśli jest tylko jedna opcja, to jest to łatwe, ale zwykle nie ma. A jeśli nie * zależy ci * na konkretnym typie, to dlaczego nie używać ograniczonego typu wieloznacznego (lub lokalnego parametru typu w metodzie). –
@JoachimSauer mówisz, że ze względu na wymazanie tekstu kompilator może wymusić żądane ograniczenie, ale nie może wydobyć/znać typu generycznego? na przykład może zrobić ">' lub nawet > ', ale typ' T' ("?" w tym przypadku) nie jest znany. –
@JoachimSauer odnośnie drugiej części twojego komentarza, oczywiście dbam o konkretny typ, ponieważ chciałbym zwrócić jego instancję z 'public T returnSomeClassImpl() {}' –