Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn?

miasma

Aktives Mitglied
Naja, die Überschrift ist wohl etwas zu reißerisch ;-)

Konkret handelt es sich nur um folgendes Beispiel:

Java:
/**
 * Record page.
 * 
 * @author Johannes Lichtenberger
 * 
 */
public interface RecordPage<K> extends Page {
  /**
   * Entry set of all nodes in the page. Changes to the set are reflected in the
   * internal data structure
   * 
   * @return an entry set
   */
  Set<Entry<K, Record>> entrySet();

  /**
   * All available records.
   * 
   * @return all records
   */
  Collection<Record> values();
  ...
}

D.h. eine Speicherseite mit Key/Value Paaren. Schlüssel und Werte sollen generisch sein, sind sie aber im Prinzip sowieso (Record ist ein Interface und stellt einen Wert dar). Kann man eigentlich generell sagen, dass man in so einem Fall, d.h. immer wenn es sich um ein Interface handelt keine bounded wildcards benötigt?

Macht ja im Prinzip keinen Unterschied ob ich Collection<? extends Record> values(); habe das ganze als interface modifier (bzw. ich weiß die Terminologie nicht) public interface RecordPage<K, V extends Record> extends Page { ... } oder wie ich bereits oben habe einfach Record zurückgeben (zur Erinnerung, Record ist ein Interface).

Kann man das so verallgemeinern dass es nur bei abstrakten oder "normalen" Klassen Sinn macht bounded wildcards zu nutzen?

Viele Grüße,
Johannes
 
zum einen interfaces sind nix anderes als abstrakte klassen (spezieller)

subklassen koennen die Methode mit ihrem Typ ueberschreiben

Java:
public interface RecordPage {
    Collection<? extends Record> foo();
}

interface Record {
    
}

interface MyRecord extends Record {
    
}

interface MyRecordPage extends RecordPage {
    Collection<MyRecord> foo();
}

ohne ? extends gehts nicht
 

Zurück
Oben