Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Exclamación en bucle if en eclipse

Hola a tod@s soy novato en java y vengo ha hacerles una pregunta sobre el siguiente error que me aparece en este código fuente.

public void crearReserva()
{
if(numeroAsientos <=10)
{
System.out.println("La sala tiene asientos libres");
} else {
System.out.println("La sala esta llena");
}
System.out.println("ID: " + getIdentificador());
System.out.println("Nombre: " + getNombre());
System.out.println("Apellidos: " + getApellidos());
System.out.println("Precio: " + SetPrecio());
}
}

El error que muestra es dead code y lo muestra en está línea del if "{System.out.println("La sala esta llena"); }", la constante numeroAsientos está declarada en una interfaz que contiene el siguiente código fuente:

public interface Constantes
{
public static final int numeroAsientos = 10;
public static final int estandar = 8;
public static final double especialDESC0001 = 6;
public static final double especialDESC0005 = 3;
}

Según estado leyendo el problema viene porque el IDE eclipse muestra está exclamación cuando hay código fuente que se usa pero que no tiene ninguna utilidad. Bueno hay va mi pregunta. ¿Como puedo hacerle entender que el código es útil para mí? Lo que intento hacer es comparar si el número de asientos es menor o igual 10 que muestre que hay asientos libres y sí no que no hay sitio en la sala. Saludos gracias por leerme y su tiempo.

septiembre 24, 2013 | Registered Commenterduende

Lo que te dice es correcto, porque ese bloque de código no se va a ejecutar nunca. De ahí el error "dead code".

Si declaras public static final int numeroAsientos = 10; es imposible que su valor sea mayor que o menor que 10, en ese bucle o en cualquier otro lugar donde la uses.

Tampoco es buena idea usar un interface para declarar constantes públicas. Es mejor usar una clase enum.

"The constant interface pattern is a poor use of interfaces. That a class uses some constants internally is an implementation detail. Implementing a constant interface causes this implementation detail to leak into the class's exported API. It is of no consequence to the users of a class that the class implements a constant interface. In fact, it may even confuse them. Worse, it represents a commitment: if in a future release the class is modified so that it no longer needs to use the constants, it still must implement the interface to ensure binary compatibility. If a nonfinal class implements a constant interface, all of its subclasses will have their namespaces polluted by the constants in the interface."

Effective Java (2nd Edition), Joshua Bloch

septiembre 24, 2013 | Registered Commenterchoces

Ya entiendo lo que ocurre que la constante nunca va a cambiar su valor y dependiendo del valor que se de a la constante se ejecutaría una parte del if. Saludos y gracias por responder tendré en cuenta tu sugerencia sobre usar las constantes dentro de una interfaz.

septiembre 24, 2013 | Registered Commenterduende