【问题标题】:Extended AbstractMap method Map.get won't assume imposed types扩展 AbstractMap 方法 Map.get 不会假定强加类型
【发布时间】:2021-10-08 05:58:05
【问题描述】:

我正在创建一个实用程序类,用声明的类型替换泛型类型。目前使用 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)在扩展类时应该替换所有泛型类型,至少我是这么认为的。

但是在我的主代码中,当使用 BoardMap.get() 时,它说它的返回类型是 Object,而不是应该的 Cell。

在上图中,c.getPerimeter().add() 接受 Cell 的实例,但它表示 boardMap.getCell() 返回的是 Object 而不是 Cell,因为 BoardMap 类明确指出它应该返回。

这是 IDE 的问题还是我忘记了什么?

【问题讨论】:

    标签: java oop inheritance netbeans overriding


    【解决方案1】:

    改变

    protected class BoardMap&lt;Point, Cell&gt; extends AbstractMap&lt;Point, Cell&gt;{

    protected class BoardMap extends AbstractMap&lt;Point, Cell&gt;{

    因为BoardMap 不是通用的。您以这种方式删除了 2 个泛型参数 PointCell,后来您使用原始类型(未声明这些泛型类型)导致所有内容在编译时都成为对象。

    【讨论】:

    • 并且“原始类型”警告是关于这个的警告。
    • 所以这是一个 Java 约定!我认为这可能是 Netbeans 没有跟进。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多