ventana sirve showmessagedialog showinputdialog showconfirmdialog que personalizar para mostrar mensaje emergente ejemplos java

java - sirve - ¿Cómo pasar nulo al método que se espera largo o int?



personalizar joptionpane (7)

El problema es que int y long son primitivos. No se puede pasar null a un valor primitivo.

Ciertamente, puede utilizar las clases de envoltura Integer y Long lugar de long y int en su método de firma.

Podría ser una pregunta tonta, pero ¿cómo puedo pasar null al método que lleva long o int ?

Ejemplo:

TestClass{ public void iTakeLong(long id); public void iTakeInt(int id); }

ahora como puedo pasar nulo a ambos methos:

TestClass testClass = new TestClass(); testClass.iTakeLong(null); // Compilation error : expected long, got null testClass.iTakeInt(null); // Compilation error : expected int, got null

¿Pensamientos, sugerencias?


La conversión del valor a Long como se indica a continuación hará que el error de compilación desaparezca pero finalmente terminará en NullPointerException .

testClass.iTakeLong((Long)null)

Una solución es usar el tipo Long lugar del primitivo long .

public void iTakeLong(Long param) { }

Otra solución es utilizar org.apache.commons.lang3.math.NumberUtils

testClass.iTakeLong(NumberUtils.toLong(null))


No puedes, no hay tal valor. Si puede cambiar la firma del método, puede hacer que tome un tipo de referencia en su lugar. Java proporciona una clase de "contenedor" inmutable para cada clase primitiva:

class TestClass { public void iTakeLong(Long id); public void iTakeInt(Integer id); }

Ahora puede pasar una referencia nula o una referencia a una instancia del tipo de contenedor. Autoboxing te permitirá escribir:

iTakeInt(5);

Dentro del método, puede escribir:

if (id != null) { doSomethingWith(id.intValue()); }

o usar unboxing automático:

if (id != null) { doSomethingWith(id); // Equivalent to the code above }


Puede convertir nulo a la clase contenedora no primitiva, que se compilará.

TestClass testClass = new TestClass(); testClass.iTakeLong( (Long)null); // Compiles testClass.iTakeInt( (Integer)null); // Compiles

Pero, esto lanzará una NullPointerException cuando se ejecute. No es de mucha ayuda, pero es útil saber que puede pasar el envoltorio equivalente a un método que toma un primitivo como argumento.


Según la cantidad de métodos que tenga y la cantidad de llamadas, tiene otra opción.

En lugar de distribuir cheques nulos a lo largo de su base de código, puede escribir métodos de envoltura (NB, no las envolturas de tipo (int => Integer), pero los métodos que envuelven la suya):

public void iTakeLong(Long val) { if (val == null) { // Do whatever is appropriate here... throwing an exception would work } else { iTakeLong(val.longValue()); } }


Usa las clases de Wrapper:

TestClass{ public void iTakeLong(Long id); public void iTakeInt(Integer id); public void iTakeLong(long id); public void iTakeInt(int id); }


Usted no puede hacer eso. Los tipos primitivos no pueden ser null en Java.

Si desea pasar null , debe cambiar su firma de método a

public void iTakeLong(Long id); public void iTakeInt(Integer id);