20

Void、、 の違いは何ですか? 代わりvoidに使用できますか?null

私がこれを求めているのは、彼らが Void を使用したサンプルの Android コードを見ているからですが、Eclipse エラーが表示されます (それは言うVoid cannot be resolved to a variable)。

壊れる私のコードは

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

こんな感じで使ってます

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

5 に答える 5

58

の最も一般的な使用法Voidは反射ですが、それが使用される可能性があるのはそれだけではありません。

void関数が値を生成しないことを意味するキーワードです。

java.lang.Voidが参照型の場合、以下が有効です。

 Void nil = null;

(これまでのところ、面白くありません...)

結果としてタイプ(戻り値がタイプVoidの関数)は、関数が*常に*リターンすることを意味します(インスタンスがないため、null以外のものを返すことはできません)。nullVoid

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

常にnullを返す関数が必要なのはなぜですか?

ジェネリックスが発明される前は、のユースケースはありませんでしたVoid

ジェネリックスでは、いくつかの興味深いケースがあります。たとえば、aFuture<T>は、他のスレッドによって実行された非同期操作の結果のホルダーです。Future.get(タイプの)操作値を返し、T計算が実行されるまでブロックします。

しかし...戻るものがない場合はどうなりますか?シンプル:を使用しFuture<Void>ます。たとえば、Google App Engineでは、AsyncronousDatastoreServicedelete操作はを返しますFuture<Void>。その将来にget()が呼び出されると、削除が完了したnullにが返されます。Callableを使って同様の例を書くことができます。

別のユースケースは、Map値なし、つまりMap<T,Void>。です。このようなマップはのように動作しSet<T>、同等の実装がない場合に役立つ場合がありSetます(たとえば、がない場合はWeakHashSet、を使用できますWeakHashMap<T,Void>)。

于 2013-03-21T02:13:40.510 に答える
4

Void「Javaキーワードvoidを表すClassオブジェクトへの参照を保持するためのインスタンス化できないプレースホルダークラス」です。(http://docs.oracle.com/javase/6/docs/api/java/lang/Void.htmlから)

void返品なしを意味する返品タイプです。

null価値の欠如です。

于 2013-03-21T02:08:45.750 に答える
3

コードに余分なコンマがあります。

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

また、(1)インスタンスがないためオブジェクトがないため、にキャストnullする必要はありません。 (2)nullはすべてのオブジェクトデータ型の有効な値であるため、何かにキャストすることはかなり役に立ちません。VoidVoidVoidnull

コードはおそらく次のようになります。

myAsyncTask.execute(null);
于 2013-03-21T02:24:37.547 に答える
2

java.lang.Voidタイプのボックス表現ですvoid。タイプのインスタンスを持つことはできないのでvoid、それは完全を期すためにほとんど存在し、リフレクションのためにそれを必要とする非常にまれなインスタンスです。

于 2013-03-21T02:09:26.223 に答える