凪瀬 Blog
Programming SHOT BAR

目次

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

書庫

日記カテゴリ

 

すぐに書くつもりが間が開いてしまいました。
誰が読むんだこんなマニアックな話題シリーズ第三部、完結編です。
わんくまではJavaはマイナーなのもあってか、単にマニアックすぎるのか、 このシリーズは非常にアクセス数が少ないです。ちょっと寂しいですね。

無名クラスでのジェネリクス

無名クラスの場合も 前回のローカル内部クラス と基本的に一緒です。

public class Hoge<T> {
  public static <X> void main(String[] args) {
    // staticメソッド内での無名クラス
    // staticメソッドなので型パラメータTは不可視なのでコンパイルエラーとなる
    Comparable<T> comparableT = new Comparable<T>() { // NG!
      @Override
      public int compareTo(T o) {
        return 0;
      }
    };
    // メソッドのローカルな型パラメータXは可視なのでOK
    Comparable<X> comparableX = new Comparable<X>() { // OK
      @Override
      public int compareTo(X o) {
        return 0;
      }
    };
  }
  public void hoge() {
    // インスタンスメソッド内での無名クラス
    // インスタンスに関連づくのでクラスの型パラメータTを利用可能
    Comparable<T> comparable = new Comparable<T>() { // OK
      @Override
      public int compareTo(T o) {
        return 0;
      }
    };
  }
}

staticメソッド内ではクラスの型パラメータは参照できず、 インスタンスメソッド内ではクラスの型パラメータが利用できます。
無名クラス内部では外側のスコープのfinalな変数を 参照することが出来ますが、staticメソッドの場合、 そもそもクラスの型パラメータを参照できないわけですから、矛盾しないわけですね。

まとめ

基本的には外側のクラスの変数などへの参照ができるケースでは外側の型パラメータも利用できます。 ただし、ハイディングを起こすので型パラメータの宣言には注意が必要です。

ジェネリクスを利用すると、型が違うけども同じ処理、といったコードをひとまとめにすることができます。
通常はクラスに型パラメータをつけて型安全の確保程度で終わるところですが、 ローカルな内部処理に内部クラスを利用すると、ジェネリクス指向をもっと活用することが出来ます。

ただでさえややこしいジェネリクスと、内部クラスを混合して使うのには訓練が必要ですが、 プログラミングとしてはとても面白い部分だと思います。是非、活用してみてください。

投稿日時 : 2007年8月15日 22:53
コメント
  • # re: ジェネリクスと内部クラス その3
    かつのり
    Posted @ 2007/08/15 23:03
    GenericsとVisitorパターンが意外と相性がいいということに、最近気づいた自分ガイル。
    JDK6のjavax.langパッケージ辺りなんですが、
    意外と面白いGenericsの使い方だなという感じです。

  • # re: ジェネリクスと内部クラス その3
    中博俊
    Posted @ 2007/08/15 23:39
    単純に休みだからでは?
  • # re: ジェネリクスと内部クラス その3
    凪瀬
    Posted @ 2007/08/16 17:09
    休みの影響もあるでしょうが、Java関連記事は軒並み他にくらべ1/2~1/3程度のアクセス数なので。

    Visitorパターンについても思いのたけがあるので、今度エントリにしますよ。
  • # KMoRsfRTRjMbgHC
    https://www.blogger.com/profile/060647091882378654
    Posted @ 2021/07/03 4:49
    Major thankies for the blog article.Thanks Again. Great.
タイトル
名前
Url
コメント