凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46600
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

数字において、ゼロの発見の偉大さはみな認めるところでしょう。 ないことを表すというのは非常に利便性の高い方法です。

デザインパターンにはNullPobjectパターンというものがあります。 これはオブジェクト指向でのゼロにまつわる工夫ですが、 ジェネリクスでも型がvoidであることを表現する方法があります。

Voidを表すクラス java.lang.Void

JavaにはVoidを表現するための java.lang.Void クラスが存在します。

このクラス、とくにメソッドも定義されていなければ、コンストラクタも定義されていないクラスです。 new してインスタンスを作ることさえできません。

Void クラスは、インスタンスを生成できないプレースホルダーとしてのクラスであり、Java キーワード void を表す Class オブジェクトへの参照を保持するのに使用されます。

intのラッパーであるIntegerと同等で、voidのラッパークラスという位置付けです。

リフレクションで用いる

リフレクションでプリミティブ型を扱う場合、ラッパークラスのTYPEフィールドを利用します。

Method method = List.class.getMethod("get", Integer.TYPE);

このコード例では引数がint型であることを表しています。

voidの場合は引数では使われることがないのでreturn値の型の確認ぐらいにしか使うことはありません。

Method method = Hoge.class.getMethod("wait"new Class[0]);
Class c = method.getReturnType();
System.out.println(c == Void.TYPE);

メソッドの戻り値がvoidであることをVoid.TYPEと比較することで確認しています。

ジェネリクスで用いる

ジェネリクスでは型Voidを使って、戻り値が帰る場合と帰らない場合を一緒くたに扱うことができます。

最近使った例ではGoFデザインパターンのVisitorパターンの戻り型ですね。 Javaの構文解析で用いるCompiler Tree APIで構文解析木を走査するための TreeVisitor などが使用例としては適切でしょう。

static class TreeVisitorImpl implements TreeVisitor<Void, Hoge> {
    public Void visitClass(ClassTree node, Hoge p) {
    ...

戻り値を返す必要のないVisitorの実装であれば戻り型のジェネリクス型パラメータにVoidを指定します。 こうすることで戻り値がないことを表現するのです。

もっとも、voidを表す定数がないので、実装ではreturn nullとしなければいけないところが滑稽ではあるのですが。

投稿日時 : 2008年3月11日 19:56
コメント
タイトル
名前
Url
コメント