java.lang.Void vs void vs Null
Was genau ist der Unterschied zwischen Void
, void
, und die kann ich nur verwenden null
statt?
Ich Frage das, weil ich bin auf der Suche mit sample-Android-code, wo Sie Nichtig, aber Eclipse Fehler auf (es sagt Void cannot be resolved to a variable
).
Mein code, der unterbrochen ist
public class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{
...
}
Ich es verwenden, wie dies
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute((Void),null);//this is the line that breaks "Void cannot be resolved to a variable"
- Es würde helfen, wenn wir sehen könnten, den code zu brechen.
- ich werde fügen Sie einen kleinen Schnipsel. nur die Reinigung it up
- übrigens können Sie auch versuchen, myAsyncTask.execute(neue Leere[1]); =D
- Es gibt keine Null-Typ.
- Fair, aber technisch gesehen falsch ist es, was die Frage war ungefähr so, glaube ich, es ist der richtige Titel, das ist, warum ich zugelassen Bearbeiten, aber änderte den Titel zurück zu der ursprünglichen
Null
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass Sie ein zusätzliches Komma im code.
Auch, es gibt keine Notwendigkeit zu werfen
null
zuVoid
, weil (1)Void
hat keine Instanzen und so gibt es keineVoid
Objekt, und (2) castingnull
zu, alles ist ziemlich nutzlos, da null ein Gültiger Wert für jedes Objekt-Datentyp.Code sollte wohl einfach sein:
execute(void[]) is ambiguous for the type MyAsyncTask
myAsyncTask.execute();
Die häufigste Verwendung von
Void
ist für die reflektion, aber das ist nicht der einzige Ort, wo es verwendet werden darf.void
ist ein Schlüsselwort, das bedeutet, dass eine Funktion nicht den Wert.java.lang.Void
ist ein Referenz-Typ, dann gilt:(so weit ist es nicht interessant...)
Als ein Ergebnis-Typ (eine Funktion mit einem Rückgabewert vom Typ
Void
) es bedeutet, dass die Funktion *immer * zurücknull
(es kann nicht zurückkehren, alles andere alsnull
, weilVoid
hat keine Instanzen).Warum möchte ich eine Funktion, die immer null zurück?
Vor der Erfindung von generics, ich habe keine Verwendung für
Void
.Mit Generika, gibt es einige interessante Fälle. Zum Beispiel, ein
Zukunft<T>
ist ein Halter für das Ergebnis einer asynchronen operation, die von anderen thread.Future.get
zurück, die operation Wert (vom TypT
), und wird blockiert, bis die Berechnung durchgeführt wird.Aber... was, wenn es nichts zu kehren? Einfach: verwenden Sie eine
Future<Void>
. Zum Beispiel, in Google App Engine die Asynchrone Datastore-Dienstdelete
operation liefert eineFuture<Void>
. Wennget()
ist aufgerufen, die Zukunftnull
zurückgegeben nach der Löschvorgang abgeschlossen ist. Man könnte schreiben, ein ähnliches Beispiel mit Callables.Anderen Anwendungsfall ist eine
Map
ohne Werte, d.h. eineMap<T,Void>
. Eine solche Karte verhält sich wie eineSet<T>
ist, dann kann es hilfreich sein, wenn es keine gleichwertige Umsetzung vonSet
(für Instanz, es gibt keineWeakHashSet
, dann könnte man eineWeakHashMap<T,Void>
).Void
ist "ein uninstantiable Platzhalter-Klasse, um einen Verweis auf das Class-Objekt, das die Java-Schlüsselwort void." (aus http://docs.oracle.com/javase/6/docs/api/java/lang/Void.html)void
ist ein Rückgabetyp bedeutet keine Rückkehr.null
ist die Abwesenheit von Wert.java.lang.Void
ist der boxed Darstellung dervoid
geben. Da Sie nicht haben, können Sie eine Instanz des Typsvoid
meistens dort auf Vollständigkeit und die sehr seltenen Fall, wo Sie es brauchen für die Reflexion.java.lang.Void
ist nicht der Box-Darstellung vonvoid
. Nannte es ein boxed-Darstellung impliziert, dass Sie die Verpackung einer primitiven.void
ist nicht eine primitive, noch ist es sogar eine Art, und es ist kein wrapping Auftritt.void
als einen primitiven Typ. Es ist sicherlich nicht eine Klasse. Es ist der ganze Zweck ist, zu stehen für die primitive Art der gleichwertigen Zweck, das ist, was "boxed Repräsentationen", die tatsächlich tun.void
ist nicht ein Typ.Void
ich sehepublic static final Class<Void> TYPE = (Class<Void>) Class.getPrimitiveClass("void");
welche Arten von zeigen, dass void als primitive type.