The HIRO Says

If you smell what The HIRO is cooking!!!

generic なメソッドの定義方法− の使い方

前回、「何で countElements(Set<E> set) と定義するとコンパイルエラーになるのか?」という宿題があったので、それを解いていきます。


やりたいこと

Set を引数にとり、その要素数を返すメソッドを定義します。
で、Set の型を任意にしたい+ <?> を使いたくないということで、任意の型を表す <E> を使うこととします。


以下のように定義したのですが…これはコンパイルエラーになります。

    private int countElements(Set<E>  set) {
        if (set == null) {
            return 0;
        }
        return set.size();
    }

アクセス修飾子と戻り値の間にも、<E> を定義する必要がありました (;´∀`)
こう定義してあげないと、後続の <E> が何を指すのかを compiler が理解できないのだそうです。

    private <E> int countElements(Set<E>  set) {
        if (set == null) {
            return 0;
        }
        return set.size();
    }

結論

<E> をメソッドの定義に使う時には、Set とかの Collection だけではなく、アクセス修飾子と戻り値の間にも <E> を定義しましょう。