51. ワイルドカード
51. ワイルドカード
型変数を特定しない操作
L:\lesson122\test.java
class test { public static void main(String args[]) { printValue(new Value<String>("kitty on your lap")); printValue(new Value<Integer>(new Integer(10))); Value<?> obj; obj = new Value<String>("Test"); printValue(obj); obj = new Value<Integer>(new Integer(10)); printValue(obj); } static void printValue(Value<?> obj) { System.out.println("type = " + obj.getValue().getClass()); System.out.println("value = " + obj.getValue()); System.out.println(""); } } class Value<T> { private T value; public Value(T value) { this.value = value; } public void setValue(T value) { this.value = value; } public T getValue() { return value; } }
実行結果
L:\lesson122>java test
type = class java.lang.String
value = kitty on your laptype = class java.lang.Integer
value = 10type = class java.lang.String
value = Testtype = class java.lang.Integer
value = 10
上限境界と下限境界
L:\lesson123\test.java
class test { public static void main(String args[]) { printNumber(new Value<Integer>(100)); printNumber(new Value<Double>(1.23456789)); // printNumber(new Value<String>("Kitty")); // エラー printText(new Value<String>("Kitty")); printText(new Value<Object>(new Integer(10))); // OK // printText(new Value<Integer>(new Integer(10))); // エラー } static void printNumber(Value<? extends Number> obj) { System.out.println("type = " + obj.getValue().getClass()); System.out.println("int value = " + obj.getValue().intValue()); System.out.println("double value = " + obj.getValue().doubleValue()); System.out.println(""); } static void printText(Value<? super String> obj) { System.out.println("type = " + obj.getValue().getClass()); System.out.println("int value = " + obj.getValue()); System.out.println(""); } } class Value<T> { private T value; public Value(T value) { this.value = value; } public void setValue(T value) { this.value = value; } public T getValue() { return value; } }
実行結果
L:\lesson123>java test
type = class java.lang.Integer
int value = 100
double value = 100.0type = class java.lang.Double
int value = 1
double value = 1.23456789type = class java.lang.String
int value = Kittytype = class java.lang.Integer
int value = 10