Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Restricciones de las excepciones

Buenos días;
Leyendo el libro de "Piensa en Java" en el capítulo del Tratamiento de errores mediante excepciones, apartado "Restricciones de las excepciones" hay una parte que no logro entender, he igual alguno de ustedes pueda resolvérmelo. El ejercicio es el siguiente, solo resumido a la parte que no entiendo...

class BaseballException extends Exception{}
class Foul extends BaseballException{}
class PopFoul extends Foul{}
class Strike extends BaseballException{}
class StormException extends Exception{}
class RainedOut extends StormException{}

abstract class Inning{
public Inning() throws BaseballException{}
public void event() throws BaseballException{}
public abstract void atBat() throws Strike,Foul;
public void walk(){}
}
interface Storm{
public void event()throws RainedOut;
public void rainHard() throws RainedOut;
}
public class StormyInning extends Inning implements Storm {
public StormyInning() throws RainedOut,BaseballException{}
public StormyInning(String s) throws Foul,BaseballException{}
//Una interfaz no puede añadir excepciones a los métodos existentes
// en la clase base:
//!public void event() throws RainedOut{}
//Podemos no generar una excepción aunque la versión base lo haga
public void event(){}
public static void main (String[] args){
}
}

Y la explicación del libro dice así:
La interfaz Storm es interesante porque contiene un método (event()) que esta definido en Inning, y otro método que no lo está. Ambos métodos generan un nuevo tipo de excepción, RainedOut. Mi primera pregunta es, ¿no generar dos tipos de excepciones distintas, RainedOut y BaseballException?
Siguiendo con la explicación del libro: Cuando StormyInning amplia (extends) Inning e implementa (implements) Storm, podemos ver que el método event() de Storm no puede cambiar la interfaz de excepciones de event() definida en Inning. Y mi pregunta es ¿A que se refiere este párrafo?.

julio 30, 2014 | Registered Commenterjoice

Ese es un caso extremo con interes meramente didactico. Yo no perderia mas de dos minutos con ello...

En la implementacion en el metodo event no puedes lanzar RainedOut, porque iria contra lo declarado en la clase base, ni tampoco BaseballException porque iria contra lo declarado en la interfaz. Debes declararlo, por tanto, como esta, sin lanzar ninguna excepcion.


Un saludo

julio 30, 2014 | Unregistered CommenterUnoPorAhi

Guenas.

Desearia matizar algo mas.

No escribes las Exception RainedOut y BaseBallException, por lo que cualquiera de estas podría extender alguna de las que queremos/podemos usar.

Como dice Uno, el interes es academico, pero es importante para entender la herencia.

Yo que tu escribiria ejemplos de prueba y veria que dice el IDE que usas en el caso de excepciones. Es una buena manera de entender no solo el que sino también el porque.

Un saludo

julio 30, 2014 | Unregistered CommenterPaposo

En sí Paposo estoy utilizando el NETBEANS IDE 7.4, como tu dices para saber el porque. De momento estoy aprendiendo, ni domino Java ni NetBeans. Yo he observado que me subraya en rojo el Override de (public void event() throws RainedOut{}) si quito el comentario y además quito la llamada al método event() sin excepciones, pero el ejercicio me compila.

No entiendo Paposo a que te refieres con "No escribes las Exception RainedOut y BaseBallException, por lo que cualquiera de estas podría extender alguna de las que queremos/podemos usar."

Gracias a los dos por vuestras respuestas. Perdonad mi ignorancia.

julio 30, 2014 | Unregistered Commenterjoice

Guenas.

Nada. Lei mal. Si las tienes escritas :)

Un saludo

julio 31, 2014 | Unregistered CommenterPaposo

En referencia al ejercicio de ayer, leyendo otro apartado donde dice si creamos un objeto exactamente de tipo StormyInning, el compilador nos obligará a capturar únicamente las excepciones que sean específicas de esa clase, pero si efectuamos una generalización al tipo base, entonces el compilador nos obligará a capturar las excepciones del tipo base.
Como ya he dicho yo utilizo el NETBEANS IDE 7.4 y no me obliga a utilizar las excepciones de la clase base. ¿?

julio 31, 2014 | Unregistered Commenterjoice