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
).
- GetActionBar () devuelve null después de la actualización de SDK a 5.0
- ¿Cómo puedo asegurar que el controlador de otro hilo no sea nulo antes de llamarlo?
- Multi claves primarias en Android SQLite
- FindViewById devuelve null - Android - setContentView
- FindViewByID devuelve null para CustomView
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"
- Java: La excepción en sí es nula
- ¿Cómo comprobar si existe una tabla en Android?
- Error al entregar el resultado ResultInfo {who = null, request = 1, result = -1, data = Intent {(tiene extras)}} a actividad; Java.lang.NullPointerException
- Try catch exception devuelve siempre null
- GCM devuelve un tipo de mensaje nulo
- Recyclerview se bloquea al eliminar el último elemento. NullPointerException: android.view.ViewGroup $ LayoutParams android.view.View.getLayoutParams ()
- La aplicación se bloquea cuando se ejecuta desde el teléfono, pero funciona bien cuando se inicia desde el equipo
- Error: valor nulo en la entrada: blameLogFolder = null
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.
- Android NumberPicker no guardar los cambios de EditText
- Button.setBackground (dibujable fondo) lanza NoSuchMethodError