Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Duda sencilla sobre la creación de objetos.

Hola a tod@s,
siempre me ha surgido esta duda..y la verdad..no sé como resolverla....
Imaginemos que tengo una clase Monedero, con un atributo saldo que siempre deberá de ser positivo. Imaginemos que dicha clase posee un constructor que recibe un parámetro de tipo entero que será el saldo. A mi me gustaría hacer...si me pone un saldo negativo...no creo dicho objeto..pero Java te obliga que una vez se está en el constructor se va a crear si o si el objeto...
Monedero m = new Monedero(-1000);
Me gustaría que m valiese null y no fuera un objeto tipo monedero.
Gracias.
Saludos.

abril 25, 2013 | Unregistered Commentershao

Efectivamente, cuando se crea el objeto deja de ser nullo. Pero si queres tener esta funcionalidad, podrías crear una clase que contenga a Monedero, entonces sólo si el valor es positivo se crea la instancia de Monedero. Entoces el metodo getMonedero() te devolverá nullo o el valor correspondiente.

Ejemplo:
public class MyMonedero{
private Monedero monedero
public MyMonedero(int valor) {
if (valor >=0) {
monedero = new Monedero(valor);
}
}
public Monedero getMonedero() {
return monedero;
}
}

abril 25, 2013 | Unregistered CommenterCarlos

Monedero getMonedero(int parametro){
return parametro < 0 ? null : new Monedero(parametro);
}

abril 26, 2013 | Registered Commenterchoces

Gracias...había pensado en esas alternativas pero quería saber si se podía hacer desde el constructor.
Saludos!

abril 28, 2013 | Unregistered Commentershao

No se puede asignar un valor null a una instancia de una clase, desde su constructor.

Hay otra posibilidad que se resume en el test siguiente.

public class Monedero {

public Monedero(final int valor) {
if (valor < 0) {
throw new IllegalArgumentException("valor menor que cero");
}
}
}

public class TestMonedero {

public static void main(String[] args) {
Monedero clazz1 = null;
try {
clazz1 = new Monedero(1);
} catch (IllegalArgumentException ex) {
}
System.out.println(clazz1);

Monedero clazz2 = null;
try {
clazz2 = new Monedero(-1);
} catch (IllegalArgumentException ex) {
}
System.out.println(clazz2);
}
}

abril 29, 2013 | Registered Commenterchoces