无法从int转换或转换为Integer,并且无法在方法覆盖中实例化Integer

时间:2013-11-30 12:28:20

标签: java

以下是公共类的范围

private class WrapperMap<K, Integer> extends HashMap<K, Integer>{
    @Override
    public Integer get(Object key){
        if (super.containsKey(key))
            return super.get(key);
        else{
            return new Integer(1);
        }
    }
}

我尝试了很多东西来返回else块中的Integer对象1,但似乎没有任何效果。为什么不呢?

return new Integer(1);导致Cannot instantiate the type Integer
return Integer.valueOf(1)导致The method valueOf(int) is undefined for the type Integer return 1导致Type mismatch: cannot convert from int to Integer return (Integer)1;导致Cannot cast from int to Integer

3 个答案:

答案 0 :(得分:3)

朋友..试试这个:

private class WrapperMap<K> extends HashMap<K, Integer>{
@Override
public Integer get(Object key){
    if (super.containsKey(key))
        return super.get(key);
    else{
        return 1;
    }
}
}

WrapperMap你不需要两个泛型变量。
Integer中的WrapperMap<K, Integer>被视为类型变量 由于S的第二个类型变量HashMap<K,S>固定为Integer,因此WrapperMap<K>就足够了。

祝你好运!

答案 1 :(得分:0)

只需“返回1”而不是“返回新的整数(1)”,它将被自动装箱并保持相同的返回类型。

喜欢这个。

public Integer get(Object key){
        if (super.containsKey(key))
            return super.get(key);
        else{
            return 1;
        }
    }

答案 2 :(得分:0)

您已将Integer指定为类型参数,并且它会影响您想要的java.lang.Integer类。由于您的课程仅适用于Integer,因此请将其作为参数删除(将其保留在HashMap上),并且您的代码应该可以正常运行。