118

Javaでジェネリックを使用しているため、Void戻り値の型として関数を実装する必要がありました。

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

コンパイラは何かを返すように要求します。今のところ私はちょうど戻ってきnullていますが、それが良いコーディングの練習であるかどうか疑問に思っています...

ボイドではなく、ヴォイドについて質問しています。予約済みのキーワードではなく、クラスです。Voidvoid

私も試しました、、、、Void.classまったくvoid戻りませんがVoid.TYPEnew Void()すべてがまったく機能しません。(多かれ少なかれ明白な理由で)(詳細については、この回答を参照してください)

  • 関数の戻り値の型が の場合、何を返せばよいのVoidでしょうか?
  • Voidクラスの一般的な用途は何ですか?
4

6 に答える 6

106

では、関数の戻り型が必要な場合、何を返す必要がありますVoidか?

を使用しreturn nullます。インスタンス化することはできず、タイプのVoid単なるプレースホルダーです。Class<T>void

ポイントはVoid何ですか?

上記のように、これはプレースホルダーです。Voidたとえば、リフレクションを使用してreturnタイプが。のメソッドを調べた場合に返されるのはvoidです。(技術的には、元に戻りClass<Void>ます。)。をパラメーター化する場合など、これらの線に沿って他のさまざまな用途がありますCallable<T>

Javaでジェネリックを使用しているため、この関数を実装する必要がありました。

このシグネチャを使用してメソッドを実装する必要がある場合は、APIで何かがファンキーになる可能性があると思います。やりたいことを行うためのより良い方法があるかどうかを慎重に検討してください(おそらく、別のフォローアップ質問で詳細を提供できますか?)。これは「ジェネリックの使用のために」のみ発生したので、私は少し疑わしいです。

于 2009-03-24T09:38:59.100 に答える
26

Voidをインスタンス化する方法はないため、返すことができるのはnullだけです。

于 2009-03-24T09:39:35.557 に答える
21

あなたが与えた他の提案がうまくいかない理由を明確にするために:

Void.classVoid.TYPEは同じオブジェクトを指しClass<Void>、 ではなく タイプですVoid

そのため、これらの値を返すことはできません。new Void()タイプになりますVoidが、そのコンストラクターは存在しません。実際にVoidは、パブリック コンストラクターがないため、インスタンス化できません。Voidポリモーフィック以外の型のオブジェクトを持つことはできませんnull

お役に立てれば!:-)

于 2009-05-19T07:10:02.983 に答える
21

return null行く方法です。

于 2009-03-24T09:36:44.770 に答える
1

あいまいな理由でこのタイプを使用する必要がある場合は、戻り値はとにかく使用されないと思うので、実際にnullを返すことは賢明なオプションのようです。
コンパイラはとにかく何かを返すように強制します。
また、このクラスにはパブリックコンストラクタがないようであるため、新しいVoid()は使用できません。

于 2009-03-24T09:38:19.867 に答える