2009-03-24 10 views
109

をため、私は戻り値の型としてVoidを持つ関数を実装することで終わったJavaでジェネリック医薬品の使用に:私は何かを返すメソッドの戻り値の型が無効の場合、私は何を返すのですか? (無効ではない!)

public Void doSomething() { 
    //... 
} 

とコンパイラの要求。今の私はnullを返すんだけど、それはコーディングの練習良好であれば、私は思ったんだけど...

私も全くVoid.classvoidVoid.TYPEnew Void()、ノーリターンを試してみたが、すべて「doesnのことまったく働きません。

  • (詳細はthis answerを参照してください)(多かれ少なかれ明白な理由)だから何私は、関数の戻り値の型がVoidある場合に返すことになってんですか?
  • Voidクラスの一般的な使用方法は何ですか?

EDIT:あなたにdownvotesを惜しまする:私はおよそV OID、ないV OIDを求めています。クラスVoid,ではなく、予約キーワードvoid

答えて

98

関数の戻り値の型がVoidでなければならない場合はどうすればいいですか?

return nullを使用してください。 Voidはインスタンス化することができず、のClass<T>タイプのプレースホルダに過ぎません。

Voidのポイントは何ですか?

前述のとおり、プレースホルダです。 Voidは、たとえば反射を使用して戻り値の型がvoidのメソッドを見た場合に返されるものです。 (技術的には、Class<Void>が返ってきます。)Callable<T>をパラメータ化する場合と同様に、これらの行にはさまざまな用途があります。私はあなたがこれでメソッドを実装するために必要であれば、何かがあなたのAPIとファンキーであり得ることを言うと思います原因私は

この機能を実装することで終わったJavaでジェネリック医薬品の使用に

署名。あなたが望むことを実行するためのよりよい方法があるかどうかを注意深く考えてください(おそらく、別の詳細な質問で詳細を提供できますか?)。私はちょっと疑わしい。なぜなら、これは「ジェネリック薬の使用のせいで」起こったからだ。

+11

Voidを返さなければならないのは結局のところファンキーではありません。それは、例えば、呼び出し可能な。ときどき何かを返す必要はありませんが、例えば何も使用できません。実行可能ファイル。 – Bombe

+0

Voidには正当な用途があります。しかし、彼は「これはジェネリック医薬品を使用したために起こった」と述べた。それはVoidを使う必要があるコレクションに何かをしたように聞こえますが、私はそれはかなり例外的なケースです。 –

+0

コレクションでは、実際には非常に奇妙なことになります。 – Bombe

18

return nullです。

0

わかりにくい理由から、この型を使用する必要がある場合は、戻り値が使用されないと考えられるため、実際にはnullを返すのは分かりやすいオプションのようです。
コンパイラは、とにかく何かを返すよう強制します。
このクラスはpublicコンストラクタを持っていないようですので、新しいVoid()は使用できません。

+0

私はしなければならない;それはちょうど慣習です。 –

23

Voidをインスタンス化する方法はありません。したがって、唯一のものはです。戻り値はnullです。

+13

より正確には、邪悪なことをせずにVoidをインスタンス化する方法はありません。 –

17

あなたが与えた他の提案が動作しない理由を明確にする:同じオブジェクトを

Void.classVoid.TYPE点とタイプClass<Void>のではなく、Voidです。

そのため、これらの値を返すことはできません。 new Void()Voidであるが、そのコンストラクタは存在しない。実際にはVoidにはパブリックコンストラクタがないため、インスタンス化できません。多形nullを除き、タイプVoidのオブジェクトは決して使用できません。

希望すると便利です。 :-)

+0

マイナーな修正: 'Void.TYPE'は' Void.class'を指しません。 'void.class'を指しています。 – shmosel