2016-12-02 20 views
5

Obecnie mammapa do klasy, która implementuje interfejs

class A {...} 
interface B {...} 

Co chciałbym mieć jakiś odpowiednik

HashMap<String, A implements B> 

znaczy, że String mapy do każdej instancji A który implementuje B . Ale ta składnia nie kompiluje się. Czy istnieje sposób na mapowanie do klasy implementującej interfejs? Należy również zauważyć, że A nie jest nazwą rodzajową, więc nie mogę zrobić coś takiego

A<? implements B> 
+0

masz na myśli wszelkie podklasy "A", które implementują 'B'? –

+0

To pachnie jak zapach kodu. Czy na pewno projekt hierarchii klas jest poprawny? – biziclop

+0

@NicolasFilotto dokładnie – Sherz

Odpowiedz

5

Jest to możliwe do zrobienia w ogólny kontekst, na przykład, w ogólny sposób:

public <T extends A & B> void method() { 
    Map<String, T> map = new HashMap<>(); 
} 

Niestety , nie możemy zastosować tych wielu ograniczeń do symboli wieloznacznych.

+0

To wygląda interesująco, ale deklaruję tę mapę w metodzie, która już ma wartość zwracaną, więc nie mogę uzyskać tej parametryzacji z podpisu. Z technicznego punktu widzenia mógłbym to uczynić w jakiejś dziwacznej metodzie getHashMap(), która zwraca sparametryzowaną mapę opartą na sygnaturze, ale wygląda na to, że jest zhakowana. – Sherz

+0

@Sherz, tutaj zwracany typ nie ma znaczenia, metoda może zostać wywołana w ten sposób. method() 'gdzie' C' to 'klasa C rozszerza A implementuje B'' – Andrew

Powiązane problemy