Java での void と Void の違い

Mehvish Ashiq 2023年10月12日
  1. Java の voidVoid の違い
  2. Java で voidVoid を使用する
Java での void と Void の違い

java.lang.Void タイプは、java.lang.Integer に類似しています。Voidvoid をラップアラウンドしてオブジェクトクラスを拡張し、void には可能な値がないため、java.lang.Void はインスタンス化できません。

私たちは、Java プログラミングにおける Voidvoid の違いを見つけて理解することを目指しています。また、Java プログラミングで Void または void を使用する方法と場所についても学習します。

Java の voidVoid の違い

両方(Voidvoid)の基本的な違いは、void がプリミティブ型であるのに対し、VoidObject から継承する参照型であるということです。それらのどれも可能な値を持っていませんが、両方とも異なるタイプです。

void(すべて小文字)は、値が存在しないことを示すために使用される不適切なタイプです。目立たない値がないため、void は関数またはメソッドによって値が返されないことを意味します。

一方、java.lang.Void はオブジェクトを返し、null を返して合法的に物事を行うことができます。これが唯一の方法です。外部からアクセスできないプライベートコンストラクターがあるため、インスタンス化できません。

Java で voidVoid を使用する

メソッドが値を返さないようにする場合は、void(すべて小文字)を使用します。次の例のように、printMessage() メソッドは何も返しませんが、画面にメッセージを出力します。

voidMain.java)のサンプルコード:

public class Main {
  static void printMessage() {
    System.out.println("printMessage function just got executed!");
  }

  public static void main(String[] args) {
    printMessage();
  }
}

void キーワードをオブジェクトとして提示する必要がある場合があるため、Java プログラミングでリフレクションを行うときに Void(最初の文字を大文字にする)を使用できます。

同時に、Void クラスのオブジェクトを作成することは許可されていません。そのため、そのコンストラクターはプライベートであり、外部からアクセスすることはできません。

さらに、final クラスであるため、Void クラスを継承することはできません。これにより、リフレクションで Void を使用することになります。ここで、メソッドの戻り型は void として取得されます。

VoidMain.java)のサンプルコード:

public class Main {
  public static void main(String[] args) throws SecurityException, NoSuchMethodException {
    Class c1 = TestOne.class.getMethod("Test", (Class<?>[]) null).getReturnType();
    System.out.println(c1 == Void.TYPE); // true
    System.out.println(c1 == Void.class); // false
  }
}

VoidTestOne.java)のサンプルコード:

class TestOne {
  public void Test() {}
}

出力:

True
False

ジェネリックスを使用して、メソッドの戻り型を void として取得することもできます。何かに対して void を返すことができる汎用クラスのコードを記述したいと思います。

abstract class Foo<T> {
  abstract T bar();
}

class Bar extends Foo<Void> {
  Void bar() {
    return (null);
  }
}

出力:

True
False
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - Java Void