NavigableMap抛出不必要的异常

时间:2017-07-07 06:08:24

标签: java exception

来自NavigableMap的java文档:firstKey() of Navigable map

  

返回与此映射中的最小键关联的键 - 值映射,如果映射为空,则返回null。

然而,当我运行以下程序时,我得到NoSuchElementException

 public class Test1 {
        public static void main(String a[]) {
            NavigableMap<Object, Object> map = new TreeMap<>();
            Object obj = map.firstKey();
        }
    }

我不确定我是否遗漏了一些东西,请告诉我为什么会这样?

3 个答案:

答案 0 :(得分:3)

正如firstKey()函数的文档所述:

/**
 * Returns the first (lowest) key currently in this map.
 *
 * @return the first (lowest) key currently in this map
 * @throws NoSuchElementException if this map is empty
 */
K firstKey();

所以在你的情况下,地图是空的,因此是例外

如果您查看该方法的TreeMap实施,那么您会看到:

/**
 * @throws NoSuchElementException {@inheritDoc}
 */
public K firstKey() {
    return key(getFirstEntry());
}

getFirstEntry如果是空集,则返回null,然后返回key方法:

/**
 * Returns the key corresponding to the specified Entry.
 * @throws NoSuchElementException if the Entry is null
 */
static <K> K key(Entry<K,?> e) {
    if (e==null)
        throw new NoSuchElementException();
    return e.key;
}

因为对象本身是TreeMap而不是NavigableMap,您需要检查派生的实现和文档,即使引用是基础

答案 1 :(得分:1)

正如@Gilad Green所指出的,firstKey API的行为符合文档。

但我认为你可能正在寻找以下方法 -

firstEntry()
Returns a key-value mapping associated with the least key in this map, or null if the map is empty.

这将为您提供Map.Entry对象。在你的情况下,它将返回null,因为地图还没有任何条目。

答案 2 :(得分:0)

returns null if there is no key

这是关键的价值。但是你在问自己。

K firstKey()

  

返回:       当前在此地图中的第一个(最低)键

     

抛出:       NoSuchElementException - 如果此地图为空