返回INT的未定义参数

时间:2020-07-27 09:54:53

标签: java

当我这样创建代码时,我有这样的代码

public final class PhpArray extends AbstractMap
{
    private TreeMap t;
    private HashMap m;
    
    public PhpArray() {
        this.t = new TreeMap(Request.PHP_ARRAY_KEY_COMPARATOR);
        this.m = null;
    }
    
    @Override
    public Object put(final Object key, final Object value) {
        if (this.m != null) {
            return this.m.put(key, value);
        }
        try {
            return this.t.put(key, value);
        }
        catch (ClassCastException e) {
            this.m = new HashMap(this.t);
            this.t = null;
            return this.m.put(key, value);
        }
    }
    
    @Override
    public Set entrySet() {
        if (this.t != null) {
            return this.t.entrySet();
        }
        return this.m.entrySet();
    }
    
    public int arraySize() {
        if (this.t == null) {
            throw new IllegalArgumentException("The passed PHP \"array\" is not a sequence but a dictionary");
        }
        if (this.t.size() == 0) {
            return 0;
        }
        return 1 + this.t.lastKey();
    }
}

但是当我更新项目时,代码中出现错误

return 1 + this.t.lastKey();

错误是参数+未定义。为什么会这样?以及如何解决该问题?

1 个答案:

答案 0 :(得分:1)

TreeMap是一个泛型类,但是在您所提问的代码中,您没有类型参数就使用了它。这意味着您的代码的这一行:

private TreeMap t;

本质上是这样的:

private TreeMap<Object, Object> t;

换句话说,t.lastKey()返回一个Object,并且+不能与运算符Object一起使用,因为Object不是数字。 / p>

也许您打算调用方法size()而不是方法lastKey()

这个tutorial可能有帮助吗?