java generics және кеңейтеді

Мен құжаттарды оқыдым, бірақ мұнда дұрыс емес екенін көрмеймін ... мақсат - ItemIFs-ді қамтитын жалпы жиынтық сыныбы. Java.util.TreeMap үшін Java көзі:

public V put(K key, V value) {
  Comparable<? super K> k = (Comparable<? super K>) key;
  cmp = k.compareTo(t.key);

Мен төменде келтірілген кодты пайдаланып құюдан аулақ болғым келді -Xlint: компиляцияланбаған кезде ескертуді «бақылаусыз қоңырау» алыңыз. Ұсыныстар?

interface ItemIF {
  int compareItem( TP vv);
}//end interface ItemIF


class Wlist {
TP coreItem;
void insert( TP item) {
 //*** Following line gets: warning: [unchecked] unchecked call   ***
 //*** to compareItem(TP) as a member of the raw type ItemIF      ***
  int icomp = coreItem.compareItem( item);
}
}//end class


class Item implements ItemIF {
String stg;
public Item( String stg) {
  this.stg = stg;
}
public int compareItem( Item vv) {
  return stg.compareTo( vv.stg);
}
}//end class Item


class Testit {
public static void main( String[] args) {
  Wlist bt = new Wlist();
  bt.insert( new Item("alpha"));
}
}//end class Testit
2
( TreeMap ескертуі Comparator немесе Comparable деп болжанса, сол сыныпты пайдаланады, бұл жаман идея. міндетті түрде кірді енгізу).
қосылды автор Tom Hawtin - tackline, көзі

2 жауаптар

Тырысу

class Wlist>

әйтпесе шикізат түрі ретінде сіз ItemIF пайдаланасыз.

4
қосылды
Рахмет, бұл жұмыс істеді!
қосылды автор Sullivan, көзі
public int compareItem( Item vv)

TP емес, Item функциясын пайдаланбайды, сондықтан сіз оны TP арқылы ItemIF арқылы ұзартады.

Оны өзгертіп көріңіз

public int compareItem( ItemIF vv)
0
қосылды
Бұл жұмыс істемейді, себебі «ItemIF vv» функциясын пайдаланғанда, vv элементінің түрі көп емес, сондықтан stg-ге қатынау болмайды. Сондықтан, vv.stg сайтына кіру үшін шлюзді пайдалануымыз керек. Бұл java.util.TreeMap жасайды және мен аулақ болуға тырысамын.
қосылды автор Sullivan, көзі