今日、ソースコードをチェックしていたとき、java.lang.voidクラスを発見しました。これの機能は何ですか?
ソースコードを介して最初に確認してください
パッケージjava.lang;/** * {@code void}クラスは、Javaキーワード * voidを表す{@code class}オブジェクトへの参照を保持するための触覚不可能なプレースホルダークラスです。 * * @author unccounted * @since jdk1.1 * /public finalclass void { /** * {@code class}オブジェクトは、 *キーワード{@code void}に対応する擬似タイプを表します。 */ @suppresswarnings( "unchecked")public static final class <void> type =(class <void>)class.getPrimitiveClass( "void"); / * * voidクラスをインスタンス化することはできません。 */ privatevoid(){}}ソースコードから、このクラスが最終的であり、継承することができず、コンストラクトがプライベートであり、新しいものではないことがわかります。
では、このカテゴリの機能は何ですか?
これがJava.lang.integerクラスのソースコードです
intのラッパークラスはjava.lang.integerであることを私たちは皆知っています
このことから、java.lang.integerがintのラッパークラスであることがわかります。
同様に、java.lang.voidの次のソースコードを通じて、java.lang.voidがvoidキーワードのラッパークラスであることがわかります。
public static final class <void> type =(class <void>)class.getPrimitiveClass( "void");
使用違反
voidクラスは、魅力的ではないプレースホルダークラスです。メソッドがボイド型を返す場合、メソッドはnullタイプのみを返すことができます。
例は次のとおりです。
public void test(){return null;}シナリオ1を使用してください:
future <void> f = pool.submit(new callable(){@override public void call()throws Exception {...... return null;}});たとえば、呼び出し可能なインターフェイスを使用すると、インターフェイスは値を返す必要がありますが、実際の実行後に返されるデータはありません。この時点で、voidタイプを返品型として使用できます。
シナリオ2を使用してください。
返品値が無効になってすべてのメソッドを反映します。
public class test {public void hello(){} public static void main(string args []){for(method:test.class.getMethods()){if(method.getReturnType()。 }}}}実行結果:
mainhellowaiwaitwaitnotifynotifyall
PS:以下では、java.lang.voidとvoidの比較と使用を紹介します
voidキーワードは、関数が結果を返さず、Javaのキーワードであることを意味します。
java.lang.voidはタイプです。たとえば、nullの値をボイド参照に割り当てます。
void nil = null;
voidクラスのコードを介して、void型を継承したり、インスタンス化したりできないことがわかります。
public finalclass void { /** * *キーワード{@code void}に対応する擬似タイプを表す{@code class}オブジェクト。 */ @suppresswarnings( "unchecked")public static final class <void> type =(class <void>)class.getPrimitiveClass( "void"); / * * voidクラスをインスタンス化することはできません。 */ privatevoid(){}}関数の返された結果として無効は、関数がnullを返すことを示します(nullを除く他のタイプを返すことはできません)。
void function(int a、int b){//何かを返しますnull; }ジェネリックが現れる前に、voidは一般に反射で使用されていました。たとえば、次のコードは、returnタイプのvoidのメソッド名を印刷します。
public class test {public void print(string v){} public static void main(string args []){for(method:test.class.getMethods()){if(method.getReturnType()。 }}}}ジェネリックが表示された後、いくつかのシナリオでvoidタイプが使用されます。たとえば、 Future<T>結果を保存するために使用されます。 Future's GETメソッドは結果を返します(Type T)。
しかし、操作が値を返さない場合はどうなりますか?この場合、 Future<Void>で表現できます。 Getを呼び出した後に結果が計算されると、返却後にnullが返されます。
さらに、VoIDは価値のないマップでも使用されます。たとえば、 Map<T,Void> 、したがって、MAPはSet<T>と同じ関数になります。
したがって、ジェネリックを使用する場合、関数は結果を返す必要はありません。またはオブジェクトは値を必要としません。これは、java.lang.voidタイプで表すことができます。
要約します
上記は、編集者が紹介したjava.lang.voidのクラス分析と使用の詳細な説明です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!