いろいろガンガンいこうぜ。体も大事に

普段はJavaでAndroidアプリ開発しているプログラマーのブログです。

ジェネリクス(総称型)について その3

前回,型パラメータが一つのジェネリクスを使ったクラスを作ってみました。 今回は型パラメータが二つのクラスを試してみます。

package com.mrstar.practice_generics;

public class SampleGeneric<T1, T2> {
    private T1 mValue1;
    private T2 mValue2;

    public SampleGeneric(T1 value1, T2 value2) {
        mValue1 = value1;
        mValue2 = value2;
    }

    public T1 getValue1() {
        return mValue1;
    }

    public T2 getValue2() {
        return mValue2;
    }

    @Override
    public String toString() {
        return String.format("%s %s", mValue1.toString(), mValue2.toString());
    }
}

使う側はこんな感じで。

SampleGeneric<Integer, Integer> sample0 = new SampleGeneric<Integer, Integer>(2, 1);
System.out.println(sample0);  // 2 1

SampleGeneric<String, Integer> sample1 = new SampleGeneric<String, Integer>("Hello", 0);
System.out.println(sample1);  // Hello 0

SampleGeneric<Integer, String> sample2 = new SampleGeneric<Integer, String>(1, "World");
System.out.println(sample2);  // 1 World

もう一つ。

インターフェースでも型パラメータを使ってみます。

package com.mrstar.practice_generics;

public interface MyFunction<S, R> {
    R func(S source);
}

このインタフェースは,funcというメソッドのみを持ちます。

このインタフェースを実装したクラスを定義してみます。

package com.mrstar.practice_generics;

public class StringLengthFunction implements MyFunction<String, Integer> {
    @Override
    public Integer func(String source) {
        return source.length();
    }
}

使ってみます。

System.out.println(new StringLengthFunction().func("hello"));  // 5
System.out.println(new StringLengthFunction().func("Hello world!"));  // 12

もう一つ。

package com.mrstar.practice_generics;

public class DegreeToRadianFunction implements MyFunction<Integer, Double> {
    @Override
    public Double func(Integer degree) {
        return Math.PI * degree / 180.0;
    }
}

これも使ってみます。

System.out.println(new DegreeToRadianFunction().func(0));  // 0.0
System.out.println(new DegreeToRadianFunction().func(90));  // 1.5707963267948966
System.out.println(new DegreeToRadianFunction().func(180));  // 3.141592653589793
System.out.println(new DegreeToRadianFunction().func(360));  // 6.283185307179586