扩展的 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 个泛型参数 PointCell,稍后您使用原始类型(未声明这些泛型类型)导致所有内容在编译时成为对象。