首页 > 解决方案 > 抛出异常是合法的 else 语句吗?

问题描述

我目前正在对一项看似简单的任务感到绝望。

        protected Entry<K, V>[] entries;


        public V getOrThrow(K k) throws UnknownKeyException
        {
            for(Entry<K, V> i : entries)
            {
                if(i.getValue() != null)
                {
                    if(i.getKey().equals(k))
                    {
                        return i.getValue();
                    }
                    else throw new UnknownKeyException();
                }
                else throw new UnknownKeyException();
                
            }
            
        }

该方法应该检查一个值是否存在,然后关联的键是否与传递的参数匹配,然后返回该值。否则,将抛出异常。该值属于 V 类型。现在我收到错误消息:“此方法必须返回 V 类型的结果”。所以我想并不是 if 语句的所有情况都包括在内。这是因为例外吗?例外情况甚至是合法的 else 声明吗?或者还能是什么?提前非常感谢!

标签: javaif-statementexceptiontypesreturn

解决方案


在执行整个 for 循环之前抛出异常。我认为你的代码应该是这样的。

public V getOrThrow(K k) throws UnknownKeyException {
    for(Entry<K, V> i : entries) {
        if(i.getValue() != null && i.getKey().equals(k)) {
            return i.getValue();
        }
    }
    throw new UnknownKeyException();
}

此外,f_puras 指向了正确的方向:entry 变量可能为空,因此您应该在调用该方法之前检查它。


推荐阅读