Java.lang.Void vs void vs Null

¿Cuál es exactamente la diferencia entre Void , void , y puedo usar null lugar?

Estoy preguntando esto es porque estoy viendo código de ejemplo de Android donde se utilizan errores de vacío, pero Eclipse en él (dice Void cannot be resolved to a variable ).

Mi código que se rompe es

 public class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{ ... } 

Lo uso así

 MyAsyncTask myAsyncTask = new MyAsyncTask(); myAsyncTask.execute((Void),null);//this is the line that breaks "Void cannot be resolved to a variable" 

Tiene una coma extra en su código.

 myAsyncTask.execute((Void),null); //^extra comma right here 

Además, no es necesario emitir null a Void , porque (1) Void no tiene instancias y, por lo tanto, no hay ningún objeto Void , y (2) casting null a nada es bastante inútil porque null es un valor válido para cualquier tipo de datos Object .

El código probablemente debería ser:

 myAsyncTask.execute(null); 

El uso más común de Void es para la reflexión, pero que no es el único lugar donde se puede utilizar.

void es una palabra clave que significa que una función no da como resultado un valor.

java.lang.Void es un tipo de referencia, entonces lo siguiente es válido:

  Void nil = null; 

(Hasta ahora no es interesante …)

Como resultado, el tipo (una función con un valor de retorno de tipo Void ) significa que la función * always * devuelve null (no puede devolver nada distinto de null , porque Void no tiene instancias).

  Void function(int a, int b) { //do something return null; } 

¿Por qué me gustaría una función que siempre devuelve null?

Antes de la invención de los genéricos, yo no tenía un caso de uso de Void .

Con los genéricos, hay algunos casos interesantes. Por ejemplo, un Future<T> es un soporte para el resultado de una operación asincrónica realizada por otro subproceso. Future.get devolverá el valor de operación (de tipo T ), y bloqueará hasta que se realice el cálculo.

Pero … ¿y si no hay nada que volver? Simple: use un Future<Void> . Por ejemplo, en Google App Engine, la operación de delete Servicio de Almacenamiento Asíncrono devuelve un Future<Void> . Cuando se invoca a get() en ese futuro, se devuelve null después de que se completa la eliminación. Uno podría escribir un ejemplo similar con Callable s.

Otro caso de uso es un Map sin valores, es decir, un Map<T,Void> . Tal mapa se comporta como un Set<T> , entonces puede ser útil cuando no hay implementación equivalente de Set (por ejemplo, no hay WeakHashSet , entonces se podría usar un WeakHashMap<T,Void> ).

Void es "una clase de marcador de posición no sostenible para mantener una referencia al objeto Class que representa la palabra clave Java void". (Desde http://docs.oracle.com/javase/6/docs/api/java/lang/Void.html )

void es un tipo de retorno que no significa retorno.

null es la ausencia de valor.

java.lang.Void es la representación en caja del tipo void . Puesto que no se puede tener una instancia de tipo void , lo más probable es que esté completa y la instancia muy rara donde se necesita para la reflexión.

  • Vista personalizada - ¿Cómo configuro sus ID para que se puedan encontrar a través de findViewById ()?
  • Java vs Objective C en caso de excepción nullpointer
  • Android SQLite fts3: ¿Qué debo insertar: valores nulos O cadenas vacías?
  • Consecuencias de drawable.setCallback (null);
  • ¿Cómo obtengo mi ubicación actual en Google Maps API V2?
  • Android data.getData () devuelve null de CameraActivity para algunos teléfonos
  • Mi ubicación actual siempre devuelve null. ¿Cómo puedo arreglar esto?
  • ¿Cómo podemos definir null como un tipo de datos en Android, como definimos nsNull en iPhone
  • textView.setText (); accidentes
  • Android: Cómo implementar una galería de imágenes con RecyclerView
  • GetActivity () devuelve null en la función Fragmento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.