当我覆盖"put(K键,V值)"时,在TreeMap中,如何更改“值"? [英] When I override the "put(K key, V value)" in a TreeMap, how can I change "value"?

查看:101
本文介绍了当我覆盖"put(K键,V值)"时,在TreeMap中,如何更改“值"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我扩展了一个TreeMap,覆盖了"put()",并做了等同于以下操作的事情:

I extend a TreeMap, override "put()", and do something equivalent to:

public class MyMap<K, Integer> extends TreeMap<K, Integer> {
    @Override
    public Integer put(K key, Integer value) throws ClassCastException, NullPointerException {
        java.lang.Integer newValue = java.lang.Integer.valueOf(123);
        super.put(key, newValue); // <--- error message here
        return newValue;
    }
}

错误消息:
找不到适合put(K,java.lang.Integer)...的合适方法... java.lang.Integer无法转换为Integer.

我知道它与泛型有关.更改覆盖的"put()"中的值"似乎是一件合理的事,但我无法弄清楚.

I know it has something to do with generics. Altering the "value" in an overridden "put()" seems like a reasonable thing to do, but I can't figure this out.

推荐答案

问题是,当声明 MyMap 时,您告诉Java编译器您有两种通用类型:" K "和"整数".因此," Integer "不是 java.lang.Integer 数值类,而是可以是 any 类的通用类型.由于 java.lang.Integer 不一定是您的常规" Integer "类型,因此Java编译器会发出错误.

The problem is that when declaring MyMap you tell the Java compiler that you have two generic types: "K" and "Integer". Therefore, "Integer" is not the java.lang.Integer numerical class but a generic type which can be any class. As java.lang.Integer is not necessarily your generic "Integer" type, then the Java compiler issues the error.

此示例可以解决问题:

public class MyMap<K> extends TreeMap<K, Integer> {
        @Override
        public Integer put(K key, Integer value) throws ClassCastException, NullPointerException {
            java.lang.Integer newValue = java.lang.Integer.valueOf(123);
            super.put(key, newValue); 
            return newValue;
        }
    }

另一个可以编译但没有意义的示例(只是为了您更好地了解正在发生的事情):

Just another example that compiles but makes no sense to use (just for you to better understand what's going on):

public class MyMap<K, Integer extends java.lang.Integer> extends TreeMap<K, Integer> {
        @Override
        public Integer put(K key, Integer value) throws ClassCastException, NullPointerException {
            Integer newValue = (Integer) java.lang.Integer.valueOf(123);
            super.put(key, newValue); 
            return newValue;
        }
    }

这篇关于当我覆盖"put(K键,V值)"时,在TreeMap中,如何更改“值"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆