扩展的 AbstractMap 方法 Map.get 不会采用强制类型
Extended AbstractMap method Map.get won't assume imposed types
我正在创建一个实用程序 class 用已声明的类型替换泛型。目前使用 Apache Netbeans 12.0 作为我的 IDE,它不会在编译时采用这些类型。我不知道这是 Java 概念问题还是 Netbeans 的问题。
到目前为止,这是我的代码:
protected class BoardMap<Point, Cell> extends AbstractMap<Point, Cell>{
@Override
public Set<Map.Entry<Point, Cell>> entrySet() {
Set<Map.Entry<Point, Cell>> mapSet = new HashSet<>();
this.keySet().forEach(key -> {
mapSet.add(new AbstractMap.SimpleEntry<>(key, this.get(key)));
});
return mapSet;
}
/**]
*
* @param key Point as the Cell key positioning
* @return Returns the cell represented by key
*/
public Cell getCell(Point key) {
Iterator<Entry<Point, Cell>> i = entrySet().iterator();
if (key==null) {
while (i.hasNext()) {
Entry<Point, Cell> e = i.next();
if (e.getKey()==null)
return (Cell) e.getValue();
}
} else {
while (i.hasNext()) {
Entry<Point, Cell> e = i.next();
if (key.equals(e.getKey()))
return (Cell) e.getValue();
}
}
return null;
}
}
Point 和 Cell(分别是 K 和 V)这两个 class 在扩展时应该替换所有泛型 class,至少我是这么认为的。
但是在我的主代码中,当使用 BoardMap.get() 时,它说它的返回类型是 Object,而不是 Cell 应该是。
在上图中,c.getPerimeter().add() 接受 Cell 的一个实例,但它说 boardMap.getCell() 返回对象而不是 Cell,因为 BoardMap class明确说明应该这样做。
这是IDE的问题还是我忘记了什么?
改变
protected class BoardMap<Point, Cell> extends AbstractMap<Point, Cell>{
至
protected class BoardMap extends AbstractMap<Point, Cell>{
因为 BoardMap
不是通用的。您以这种方式声明了 2 个泛型参数 Point
和 Cell
,稍后您使用原始类型(未声明这些泛型类型)导致所有内容在编译时成为对象。
我正在创建一个实用程序 class 用已声明的类型替换泛型。目前使用 Apache Netbeans 12.0 作为我的 IDE,它不会在编译时采用这些类型。我不知道这是 Java 概念问题还是 Netbeans 的问题。
到目前为止,这是我的代码:
protected class BoardMap<Point, Cell> extends AbstractMap<Point, Cell>{
@Override
public Set<Map.Entry<Point, Cell>> entrySet() {
Set<Map.Entry<Point, Cell>> mapSet = new HashSet<>();
this.keySet().forEach(key -> {
mapSet.add(new AbstractMap.SimpleEntry<>(key, this.get(key)));
});
return mapSet;
}
/**]
*
* @param key Point as the Cell key positioning
* @return Returns the cell represented by key
*/
public Cell getCell(Point key) {
Iterator<Entry<Point, Cell>> i = entrySet().iterator();
if (key==null) {
while (i.hasNext()) {
Entry<Point, Cell> e = i.next();
if (e.getKey()==null)
return (Cell) e.getValue();
}
} else {
while (i.hasNext()) {
Entry<Point, Cell> e = i.next();
if (key.equals(e.getKey()))
return (Cell) e.getValue();
}
}
return null;
}
}
Point 和 Cell(分别是 K 和 V)这两个 class 在扩展时应该替换所有泛型 class,至少我是这么认为的。
但是在我的主代码中,当使用 BoardMap.get() 时,它说它的返回类型是 Object,而不是 Cell 应该是。
在上图中,c.getPerimeter().add() 接受 Cell 的一个实例,但它说 boardMap.getCell() 返回对象而不是 Cell,因为 BoardMap class明确说明应该这样做。
这是IDE的问题还是我忘记了什么?
改变
protected class BoardMap<Point, Cell> extends AbstractMap<Point, Cell>{
至
protected class BoardMap extends AbstractMap<Point, Cell>{
因为 BoardMap
不是通用的。您以这种方式声明了 2 个泛型参数 Point
和 Cell
,稍后您使用原始类型(未声明这些泛型类型)导致所有内容在编译时成为对象。