大家好,关于JNDI中如何终止Context.list()返回的NamingEnumeration我有些疑问。网上说当NamingEnumeration.hasMore()返回false的时候终止,又说当NamingEnumeration遍历完毕后会报NamingException来终止,到底应该怎么终止呢?谢谢大家!

解决方案 »

  1.   

    public interface NamingEnumeration<T>extends Enumeration<T>此接口用于枚举 javax.naming 和 javax.naming.directory 包中的方法所返回的列表。它扩展了 Enumeration,允许在枚举期间抛出异常。 当某一方法(比如 list()、listBindings() 或 search())返回 NamingEnumeration 时,在返回所有结果之前,将保留所遇到的所有异常。在枚举结束时抛出异常(由 hasMore() 完成)。 例如,如果 list() 只返回一部分内容,则相应的异常将是 PartialResultException。list() 将先返回一个 NamingEnumeration。当已由 NamingEnumeration 的 next() 返回最后结果时,调用 hasMore() 将导致抛出 PartialResultException。 在另一个示例中,在指定大小限制为 'n' 的情况下调用 search() 方法。如果结果由 'n' 个以上的结果组成,则 search() 将首先返回一个 NamingEnumeration。当已经通过对 NamingEnumeration 调用 next() 返回了第 n 个结果时,将在调用 hasMore() 时抛出 SizeLimitExceedException。 注意,如果程序使用 hasMoreElements() 和 nextElement() 而不是在 NamingEnumeration 上迭代,那么因为这些方法无法抛出异常,所以不会抛出异常。此外,在前面的示例中,在 nextElement() 已返回第 n 个结果后,调用 hasMoreElements() 将返回 false。 还要注意的是,如果在枚举中没有剩余元素时该程序调用 next() 或 nextElement(),则将抛出 NoSuchElementException。通过使用 hasMore() 和 hasMoreElements() 检查是否已经到达枚举末尾,程序总是可以避免此异常。 如果枚举期间抛出异常,则该枚举变得无效。对该枚举后续调用任何方法都将产生不确定的结果