49. Generics

49. Generics

パラメータ化された型

L:\lesson118\test.java

class test {
    public static void main(String args[]) {
        Value<String>             obj1 = new Value<String>("kitty on your lap");
        Value<Integer>            obj2 = new Value<Integer>(new Integer(10));
        KeyValue<String, Integer> obj3 = new KeyValue<String, Integer>("keyValue", new Integer(20));

        System.out.println("obj1 type = " + obj1.getValue().getClass());
        System.out.println("value = "     + obj1.getValue());
        System.out.println("obj2 type = " + obj2.getValue().getClass());
        System.out.println("value = "     + obj2.getValue());
        System.out.println("key="         + obj3.getKey());
        System.out.println("value="       + obj3.getValue());
    }
}

class Value<T> {
    private T value;
    public Value(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
}

class KeyValue <K, V> {
    private K key;
    private V value;

    public KeyValue(K key , V value) {
        this.key   = key;
        this.value = value;
    }
    public K getKey()   { return key;   }
    public V getValue() { return value; }
}

実行結果

L:\lesson118>java test
obj1 type = class java.lang.String
value = kitty on your lap
obj2 type = class java.lang.Integer
value = 10
key=keyValue
value=20

メソッドに型変数を指定

L:\lesson119\test.java

class test {
    public static void main(String args[]) {
        write("Kitty on your lap");
        write(new Integer(10));
    }
    static <T> void write(T value) {
        System.out.println(value);
    }
}

実行結果

L:\lesson119>java test
Kitty on your lap
10

インタフェースをパラメータ化

L:\lesson120\test.java

class test {
    public static void main(String args[]) {
        A objA = new A();
        B objB = new B();

        objA.printValue("Kitty on your lap");
        objB.printValue(new StringBuffer("Kitty on your lap"));
    }
}

interface IGenerics <T> {
    void printValue(T value);
}

class A implements IGenerics<String> {
    public void printValue(String value) {
        System.out.println(getClass() + ".printValue() = " + value);
    }
}

class B implements IGenerics<StringBuffer> {
    public void printValue(StringBuffer value) {
        value.append(" : ");
        value.append(getClass());
        value.append(".printValue()");
        System.out.println(value);
    }
}

実行結果

L:\lesson120>java test
class A.printValue() = Kitty on your lap
Kitty on your lap : class B.printValue()