Załóżmy, że mamy dwa ogólne interfejsy Java: Foo<T>
i Bar<T>
, z których może istnieć wiele implementacji. Teraz załóżmy, że chcemy zapisać jednym z każdego w jednej klasie, zarówno przy użyciu tej samej wartości dla T
, ale zachować dokładne implementacje wpisane:Java: Ustalanie korelacji między parametrami typu
public interface FooBar<T, TFoo extends Foo<T>, TBar extends Bar<T>> {
TFoo getFoo();
TBar getBar();
}
Powyżej T
służy wyłącznie do celów egzekwowania że Klasy TFoo
i TBar
używają tego samego parametru typu. Dodanie tego parametru typu do FooBar
wydaje się zbędne dla dwóch powodów:
FooBar
rzeczywistości nie dbają oT
w ogóle.- Nawet jeśli tak,
T
można wywnioskować zTFoo
iTBar
.
Moje pytanie brzmi zatem, czy istnieje sposób na egzekwowanie warunków takich jak ten bez zbędnej listy parametrów typu FooBar
. Mając do napisania FooBar<String, StringFoo, StringBar>
zamiast teoretycznie równowartość FooBar<StringFoo, StringBar>
wygląda brzydko do mnie.
Na marginesie, chciałbym zobaczyć ich dodanie składnię podobną do 'publicznego interfejsu foobar , TBar rozciąga Bar > {}' Java. –
Smallhacker
Nie sądzę, że to jest możliwe. Nie przy "T" jako ogólnym. Świetne pytanie +1 –
możliwy duplikat [Nadmiarowe parametry ogólne] (http://stackoverflow.com/questions/9684186/redundant-generic-parameters) –