java泛型和扩展

时间:2011-10-28 17:10:40

标签: java

我已经阅读了文档,但是看不到我在这里做错了什么...... 目标是包含ItemIF的通用集合类Wlist。 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编译时,得到一个警告“unchecked call”:unchecked。 建议?

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


class Wlist<TP extends ItemIF> {
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<Item> {
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<Item> bt = new Wlist<Item>();
  bt.insert( new Item("alpha"));
}
} // end class Testit

2 个答案:

答案 0 :(得分:4)

尝试

class Wlist<TP extends ItemIF<TP>>

否则您使用ItemIF作为原始类型,为您提供原始类型警告。

答案 1 :(得分:0)

public int compareItem( Item vv)

使用Item而不是ItemIF,因此当您使用TP extends ItemIF调用时,您正在向下转发。

尝试将其更改为

public int compareItem( ItemIF vv)