🫥

Interfaceとstaticメソッドと匿名クラスのみでインスタンスを作る(小話)

2024/12/15に公開

概要

staticメソッドと匿名クラスの仕組みを悪用することで、個別に名前を持ったクラスを作ることなく、interfaceを実装したインスタンスを使うことができます。

対象とする読者

  • 物好きな人

実際のコード

public interface GreetingInterface {
    public String greeting();

    public static GreetingInterface getInstance() {
        return new GreetingInterface() {
            @Override
            public String greeting() {
                return "hello";
            }
        };
    }
}
public class GreetingInterfaceTest {
    public static void main(String[] args) {
        GreetingInterface greetingInterface = GreetingInterface.getInstance();
        System.out.println(greetingInterface.greeting());
        //->hello
    }
}

説明

インターフェースではstaticメソッドを利用できます。そのため、外部の具象クラスに頼らず、インターフェースからインスタンスを取り出すといったことが可能です。
そして、staticメソッド内で匿名クラスとしてインターフェースを実装しており、そのインスタンスを返しているわけです。

問題点

本来、このような実装は望ましくありません。なぜならば、インターフェースがインターフェース以上の責任を持ってしまうからです。もし、このようなコードを書こうとしているのならば、インターフェースの意義を思い出し、匿名クラスではなく名前のあるクラスとして個別に実装することが望ましいです。

Discussion