Java

無名(匿名)クラスとは?使用した場合としない場合の差、開発現場での肌感覚

無名(匿名)クラスとは?

無名(匿名)クラスとは

文字通り

名前のないクラス

です。

通常、クラスには名前がついていますが

それを省略することで

ソースコードを簡潔に書く

ということが主な目的です。

ソースの例

簡単な例です。無名クラスを使う場合と使わない場合です。

通常(無名クラス使わない)


public interface interfaceHello{
  void display();
}

public Hello implements interfaceHello{
  public void display(){
    System.out.println("Hello World");
  }
}

public class Main{
  public static void main(String[] args){
    Hello helloworld = new Hello();
    helloworld.display();
  }
}

無名クラスを使う


public interface interfaceHello{
  void display();
}

public class Main{
  public static void main(String[] args){

    interfaceHello helloworld = new interfaceHello(){
      public void display(){
        System.out.println("Hello World");
      }
    };
    helloworld.display();
  }
}

解説

無名クラスを使用すると

class Hello

というクラスを定義しなくても

プログラムソースを書くことができますね。

エンジニア
エンジニア
一回しか呼ばないのにclassを宣言するのは面倒だ

なんて時には使えるかもしれませんね。

匿名クラスが使われる例

無名クラスが使われる例としては

リスト構造を並べ替えするメソッド

『Collection.sort

を使うときに

ソート順を定義したクラスを渡してあげる必要があるのですが

いちいちソートのClassを定義するのは面倒なので

無名クラスを使用しているようです。

※私の現場でもそういう記載をしているソースコードが見当たりました。

しかし、javaのバージョンが上がり、

java8からはsteamの方が良く使われるとのことです。

速度も速いとのことです。ソースコードも書きやすそうです。

現場での肌感覚

結論として

無名(匿名)クラスは

あくまでクラス名を省略するだけなので、

無名クラスを使ったソースコードを

読むことができればOK

言い換えれば

使いこなす必要はない

というのが私の結論です。

例えば現場のソースコードレビューで

開発リーダー
開発リーダー
おい!そこは絶対無名クラスだろ!

とは言われないと思います。

例え言われても

無名クラスにしても処理の内容変わんねーだろ。てめーの趣向押し付けんじゃーねーよボケが!もっとマシな指摘しろ

くらい言い返せれば現場で生きていけこと間違いなし!

・・・

いや、冗談です。

そのときは現場リーダーの指示に従いましょう(汗)

そして

なぜそこか必ず無名クラスを使うべきなのですか?後学のために教えてください。

と聞いてみましょう。

もし、納得のいかない答えが返ってきたらそっとしておいてあげてください。

無名クラスまとめ

無名クラスのまとめです。

無名クラスとは

名前のないクラス

クラス宣言を省略できる

ソースコードを簡潔に書くため

Collection.sortの時によく利用される

使いこなさなくても読めればOK

他補足

英語で言うと・・

無名クラスは本家英語で言うと

Anonymous Classes

です。

Anonymousは『匿名』

と言う意味なので

直訳は

匿名クラス

の方が良いのかもしれません。

しかし、意味を考えると

無名クラス

と訳してあげたほうが

若手エンジニア
若手エンジニア
名前のないクラスなんだな~

と思ってくれやすいので

個人的には

無名クラス

と呼んでいます。

『匿名』

と言う言葉は

「隠れてやりたい放題」

的な意味が含まれる気がするのします(汗)

詳しく知りたい人へ

もっと正確な情報が知りたい!

という正しい考え方の人へ

本家サイトにも詳しく載っていますので参考リンクを貼っておきます。

英語ですが今日びgoogle翻訳を使えば全然読めると思います

中級者への道

今回のような

無名クラスのようなものが出てきたとき

  • 用途は何か?
  • 無名クラスを使うメリットは何か?
  • 使わない場合どうなるか?

といった切り口で調べていくと理解が深まると思います。

広告




関連記事