我有一些遗留代码,我想升级到泛型:
/**
* Places in this World
*/
public Map places;
/**
* Players watching this World
*/
public Collection players;
/**
* A reference to the Adventure using this World
*/
public Adventure owner;
/**
* Create a World. `a' is a reference to the Frame itself.
* This reference is used when loading images and sounds.
*
* @param a An instance of adventure.
*/
public World( Adventure a ) {
places = new HashMap();
players = new LinkedList();
owner = a;
}
我的IDE警告我,我没有参数化变量places
和players
,所以我应该在这段代码中添加泛型,但是如何?当我向{places'对象添加<>
或<Place>
时,它表示它不是泛型,所以我做错了。你能告诉我如何使我的代码的这部分现代化使用泛型吗?
由于
答案 0 :(得分:4)
至于places
......
首先,将类型添加到places
。假设每个值都是Place
,并且每个键都是String
:
public Map<String, Place> places;
(您需要两种类型:一种用于键,一种用于值。)
然后,在你的构造函数中,做同样的事情。
像这样:
public World(Adventure a) {
places = new HashMap<String, Place>();
...
}
其他领域更简单; LinkedList
和Collection
应该只需要一种类型,如果这是旧的代码,Adventure
(作为该代码的一部分)将不需要任何类型。
答案 1 :(得分:2)
当我向
<>
对象添加<Place>
或places
时,它会说它不是泛型
由于您没有向我们显示确切的代码,因此没有确切的错误消息,只能猜测...也许您在places
之后添加了它(在语法上不正确),或者您只添加了Map
的一个通用类型参数(需要两个:键和值)?
正确的方法是
public Map<KeyType, Place> places;
其中KeyType
代表您要使用的密钥类型。更改此声明后,还需要更新对地图类型的所有其他引用,例如
places = new HashMap<KeyType, Place>();
...
public Map<KeyType, Place> getPlaces() ...
并且可能还有外部呼叫,例如到一个二传手(如果有的话)。
答案 2 :(得分:1)
我认为您必须在地图和集合中添加要放置的对象类型:
public Map<PlaceClass> places;
public Collection<PlayerClass> players;
public World( Adventure a ) {
places = new HashMap<PlaceClass>();
players = new LinkedList<PlayerClass>();
owner = a;
}
PlaceClass和PlayerClass是Player和Place对象的类名。