JavaでGenericsを使用しているため、戻り型としてVoid
を持つ関数を実装することになりました。
_public Void doSomething() {
//...
}
_
コンパイラーはsomethingを返すことを要求します。今のところnull
を返しているだけですが、それが良いコーディングのプラクティスかどうか疑問に思っています...
私は[〜#〜] v [〜#〜]oidではなく、void。クラスVoid
、not予約キーワードvoid
。
また、_Void.class
_、void
、_Void.TYPE
_、new Void()
を試しましたが、戻り値はありませんが、すべてが機能しません。 (多かれ少なかれ明白な理由について)(詳細については this answer を参照)
Void
の場合、何を返すことになっていますか?Void
クラスの一般的な用途は何ですか?関数の戻り値の型が
Void
でなければならない場合、何を返すことになっていますか?
return null
を使用します。 Void
はインスタンス化できず、Class<T>
タイプのvoid
の単なるプレースホルダーです。
Void
のポイントは何ですか?
上記のように、それはプレースホルダーです。 Void
は、たとえば、リフレクションを使用して、戻り型がvoid
のメソッドを調べる場合に返されるものです。 (技術的には、Class<Void>
が返されます。)Callable<T>
をパラメーター化する場合など、これらの行に沿って他のさまざまな用途があります。
Javaでジェネリックを使用しているため、この関数を実装する必要がありました
このシグニチャを使用してメソッドを実装する必要がある場合、APIに何かおかしなことがあると思います。希望することを行うためのより良い方法があるかどうかを慎重に検討してください(おそらく、別のフォローアップの質問で詳細を提供できますか?)。これは「ジェネリックの使用のため」にしか出てこなかったので、私は少し疑っています。
Voidをインスタンス化する方法はないため、canを返すのはnullだけです。
return null
は進むべき道です。
他の提案が機能しない理由を明確にするために:
Void.class
とVoid.TYPE
は同じオブジェクトを指し、_Void
ではなく、Class<Void>
型です。
そのため、これらの値を返すことはできません。 new Void()
はVoid
型になりますが、そのコンストラクターは存在しません。実際、Void
にはパブリックコンストラクターがないため、インスタンス化できません。多態性Void
を除いて、null
型のオブジェクトを使用することはできません。
お役に立てれば! :-)
あいまいな理由でこの型を使用しなければならない場合、戻り値はとにかく使用されないので、実際にnullを返すことは賢明なオプションのようです。
とにかく、コンパイラーは何かを返すように強制します。
そして、このクラスにはパブリックコンストラクターがないようですので、new Void()は使用できません。