2016-04-24 27 views
0

ich die Schnittstellenkarte alsGenerika Typ Parameter versteckt erstellt den Typ

public interface Card extends Comparable<Card> { 
    ..... 
    } 

then 

    public interface Deck<Card> { 
      public void add(Card card); 
    } 

In Deck folgt Schnittstelle mit Typ-Parameter Ich erhalte die Warnung Typ-Parameter den Typ Karte versteckt. Ich kann auch den Typ T anstelle der Karte deklarieren, aber es macht mehr Sinn, dass das Deck, um die Kartenobjekte nicht mehr als das zu halten.

Ich lese einige alte Beiträge, aber nicht das klare Gefühl, warum die Warnung und was genau die praktische Bedeutung/warum der Compiler beschweren.

+0

Normalerweise verwende ich 'TCard' Namen in ähnlichen Szenarien. Ich fürchte, auf diese Frage gibt es nur meinungsbezogene Antworten. –

+0

try public interface Deck (dies ist jedoch nicht der richtige Weg, dies zu tun, Sie brauchen Deck nicht als generische Schnittstelle) – user2717954

Antwort

3
Deck<Card> 

gibt das Wort „Karte“ als Platzhalter für einen Typen in der Deck-Klasse, die gleiche Art und Weise, dass

Deck<T> 

tut: es ist nur ein Platzhalter.

Wenn du nie vorhast, dass ein Deck etwas anderes als Karten hält, ist es die beste Option, den generischen Typ in Deck alle zusammen loszuwerden.

0

Generics bedeutet, dass Sie eine Klasse möchten, die mit verschiedenen Datentypen arbeiten kann, basierend auf dem spezifischen Typ, der für eine bestimmte Instanz gewünscht wird. Betrachten Sie zum Beispiel diese Listen: Die erste Liste kann Ganzzahlen enthalten und die zweite Liste kann eine Zeichenfolge enthalten und kann alle Operationen unabhängig vom Datentyp bereitstellen, der in einer bestimmten Instanz verwendet wird.

List<Integer> list1 = new ArrayList<>(); List<String> list1 = new ArrayList<>();

Falls Sie nicht wollen, das Deck, irgend etwas zu speichern, die nicht Card dann ist es nicht die Verwendung von Generika rechtfertigen.

Für den zweiten Teil so, warum Compiler eine Warnung angezeigt wird, weil die Deck Schnittstelle nur <Card> als Platzhalter erwägen und nicht die Card Schnittstelle. Um Ihnen das explizit mitzuteilen, zeigt der Compiler diese Warnung an.