Voidは、戻り値がないことを表すために使用される特別なクラスです。Void
それ自体について特別なことは何もありませんが、インスタンス化することはできません (決してインスタンス化することはできません)。そのため、可能な唯一の値は alwaysnull
です。次の 2 つの目的で使用されます。
- ジェネリック メソッドまたはクラスには戻り値がないと言うこと。
void
を使用して Java リフレクションで戻り値の型を表すには、Void.TYPE
. たとえば、メソッドが「void」を返すかどうかをリフレクションによって判断する方法を参照してください。
したがって、実際のクラスではなく、コンパイル時に特定の不明な型を表すワイルドカードとは大きく異なります。実行時に、他のすべてのジェネリック型と同様に消去されます。
方法についてsubmit
。JDK 6 の 2 つの実装を次に示します。
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Object> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
およびJDK 7:
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
ご覧のとおり、タイプはVoid
JDK 7 でのみに変更されました。これはおそらく、概念的により理にかなっているためです。ただし、メソッドのインターフェースを変更できなかったため (互換性の理由と、メソッドが ExecutorService インターフェースを実装Future<?> submit(Runnable task)
しているため)、戻り値の型Future<?>
は同じままでした。それが私の説明です。