2012-01-20 9 views
6

Tengo una pregunta interesante. Entiendo el siguiente código C# permite a los usuarios a los valores nulos de entrada en los parámetros:¿Cuál es el equivalente de Java para el siguiente código de C#?

public DateTime? date (DateTime dt) {} 

Cuál es el equivalente al codificar en Java?

+0

No creo que haya ninguno. –

+0

Este método devuelve un DateTime que se puede nulos, pero su argumento no puede contener nulos. –

+1

El ejemplo 'C#' permite devolver un DateTime que admite nulos. El DateTime que se pasa como el parámetro no puede ser nulo. –

Respuesta

5

Si recuerdo correctamente cada objeto en Java puede ser anulable. Los tipos primitivos (int, double, float, char etc ...) no pueden ser nulos. Para usar null con ellos, debe usar su contraparte de objeto (Integer, Double, Float...)

En cuanto a las fechas, java.util.Date es un objeto, por lo que puede ser nulo. Lo mismo ocurre con el Calendario & GregorianCalendar.

código equivalente será algo como:

public Date date(Date dt) throws NullPointerException { 
    if (dt == null) throw new NullPointerException(); 
    ... 
} 

En C# se puede utilizar? para permitir val nulo en tipos primitivos (por ejemplo, para forzar errores de referencia nulos de objetos). No entiendo por qué esto te molesta. Si necesita, por ejemplo, un parámetro entero nullable en java, simplemente tiene que usar java.lang.Integer y no el tipo de primitiva int.

+0

Esta pregunta es realmente acerca de actualizar mi conocimiento con C# y la sintaxis de Java y simplemente comprender las mejores prácticas para establecer parámetros anulables. Muchas gracias por tu respuesta. – AWb

+0

C# y java son algo similares, pero aún así son dos idiomas diferentes. Hay algunas cosas que encontrarás en Java sin contraparte en C# y viceversa. Mi sugerencia es no comparar problemas específicos de sintaxis, sino compararlos con la funcionalidad.Que tengas un buen día. – BigMike

+0

En realidad, lanzar NullPointerException es un error de tiempo de ejecución, mientras que la sintaxis de C# provoca un error de compilación si intentas pasar el nulo. Cosas bastante diferentes. –

0

Java no admite tipos de valores definidos por el usuario (por ejemplo, tipos que no pueden ser nulos). A este respecto, un objeto DateTime de Java ya admite el valor de anulabilidad en virtud de permitir asignar nulo.

Para otros tipos, tales como int y double, se puede lograr el mismo efecto mediante el uso de las versiones en caja Integer y Double que están autorizados para ser asignado nulo.

1

Dado que una Fecha en Java es una clase, una referencia a ella ya puede ser nula. En otras palabras;

public Date date(Date dt) { } 

... es la versión de Java de la misma.

Tenga en cuenta que el parámetro también puede ser nulo en Java, que no puede en la versión C#.

+0

no, para ser igual tienes que verificar el parámetro dt y lanzar una NullPointerException si el valor dado es nulo (por supuesto estoy bromeando: P) – BigMike

Cuestiones relacionadas