2011-10-02 27 views
7

este es mi primer intento de un código de programa doblemente enlazada en Java:dificultad tirar NoSuchElementException en Java

Ésta es mi implementación de conseguir un iterador a getAll artículos en el doblemente LinkedList

public Object next() { 
    if(list.getSize()==0){ 
    throw new NoSuchElementException(); 

    }else{ 
     current=current.getNext(); 
     return current.getItem(); 
    } 
} 

Por favor, no se ríen de mí, pero lo que trato que estoy recibiendo

no se puede encontrar el símbolo: la clase de símbolos: NoSuchElementException

He intentado crear una clase NoSuchElementException.java que se extiende Excepción

en cuando me siento

excepción no declarada NoSuchElementException; debe ser atrapado o declarado lanzado lanzar new NoSuchElementException();

He intentado cambiar el código para:

public Object next() throws NoSuchElementException { 

Entonces consigo

siguiente() en ElementsIterator no se puede aplicar al lado() en java.util.Iterator; el método reemplazado no arroja NoSuchElementException

¿Alguien puede indicar dónde me equivoqué? Si esta información no es suficiente para resolver este problema, por favor dígame.

+0

Desde [ 'NoSuchElementException'] (http://download.oracle.com/javase/1.4.2/docs/api/java/util/NoSuchElementException.html) ya existe, no debe necesitar crea un nuevo archivo para contener una definición de él. Creo que si 'importas java.util. *; '(Y eliminas tu nuevo archivo), puedes usar' NoSuchElementException' ya proporcionado por el idioma. Pero han pasado años desde que realmente hice Java, así que espero que pronto llegue una mejor respuesta. – sarnold

+0

Muchas gracias. Como sugirió, agregué import java.util. * Y eliminé NoSuchElementException.class y funcionó. – sreeprasad

Respuesta

15

Necesita importar java.util.NoSuchElementException en lugar de crear la suya propia.

2

El método next() de Iterator no declara una excepción que se lanzará, por lo que no puede descifrar una excepción si la está implementando.

Sin embargo, puede lanzar una excepción sin marcar. La solución simple es definir su excepción personalizada como extends RuntimeException, que la convertirá en una excepción no verificada.

Estoy un poco confundido, porque NoSuchElementException es una excepción sin marcar ya, a menos que haya definido su propia clase NoSuchElementException.

+0

hey gracias, lo he conseguido importando java.util. * Y sí, ¡tu solución también funciona! – sreeprasad

6

El compilador le da una buena explicación.Usted está proporcionando una implementación del método next() declarada en Iterator, que tiene una firma de:

public Object next() 

Sin embargo, se han introducido su propio excepción comprobada llamada NoSuchElementException, lo que requiere que se cambie el método de firma a:

public Object next() throws NoSuchElementException 

Ahora ya no está implementando el método declarado en la interfaz. Has cambiado la firma.

De todas formas, hay un par de maneras en que puede solucionar este problema:

  1. Cambiar la clase NoSuchElementException por lo que hereda de RuntimeException en lugar de sólo Exception. Entonces no necesita agregar una declaración throws a la firma del método.

  2. Deshágase de su tipo de excepción personalizada y en su lugar utilice el NoSuchElementException incorporado de Java, que ya hereda de RuntimeException. Esta es casi seguramente la mejor opción.

Cuestiones relacionadas