public class Person { private Object name1; private Object name2; public Person(Object name1, Object name2) { this.name1 = name1; this.name2 = name2; } public Object getName1() { return name1; } public void setName1(Object name1) { this.name1 = name1; } public Object getName2() { return name2; } public void setName2(Object name2) { this.name2 = name2; } } |
public class Main1 { public static void main(String[] args) { Person x; x = new Person("堅田", "安雄"); String xname1 = (String)x.getName1(); String xname2 = (String)x.getName2(); System.out.println(xname1 + " " + xname2); Person y; y = new Person(123, 78); Integer yname1 = (Integer)y.getName1(); Integer yname2 = (Integer)y.getName2(); System.out.println(yname1 + " " + yname2); Person z; z = new Person(5.1, 0.3); Double zname1 = (Double)z.getName1(); Double zname2 = (Double)z.getName2(); System.out.println(zname1 + " " + zname2); } } |
Person w; w = new Person(33, "太郎"); Integer wname1 = (Integer)w.getName1(); Integer wname2 = (Integer)w.getName2(); // ここで実行時にエラー System.out.println(wname1 + " " + wname2); |
public class Person<T> { private T name1; private T name2; public Person(T name1, T name2) { this.name1 = name1; this.name2 = name2; } public T getName1() { return name1; } public void setName1(T name1) { this.name1 = name1; } public T getName2() { return name2; } public void setName2(T name2) { this.name2 = name2; } } |
public class Main1 { public static void main(String[] args) { Person<String> x; x = new Person<String>("堅田", "安雄"); String xname1 = x.getName1(); String xname2 = x.getName2(); System.out.println(xname1 + " " + xname2); Person<Integer> y; y = new Person<Integer>(123, 78); Integer yname1 = y.getName1(); Integer yname2 = y.getName2(); System.out.println(yname1 + " " + yname2); Person<Double> z; z = new Person<Double>(5.1, 0.3); Double zname1 = z.getName1(); Double zname2 = z.getName2(); System.out.println(zname1 + " " + zname2); //Person<Integer> w; //w = new Person<Integer>(33, "太郎"); ここでコンパイルエラー //Integer wname1 = w.getName1(); //Integer wname2 = w.getName2(); //System.out.println(wname1 + " " + wname2); } } |
private static Person<String> getPersonFromInteger(Person<Integer>
x) { return new Person<String>(x.getName1().toString(), x.getName2().toString()); } |
public class Person<T> { private T name1; private T name2; public Person(T name1, T name2) { this.name1 = name1; this.name2 = name2; } public T getName1() { return name1; } public void setName1(T name1) { this.name1 = name1; } public T getName2() { return name2; } public void setName2(T name2) { this.name2 = name2; } } |
public class Main1 { public static void main(String[] args) { Person<String> x; x = new Person<String>("堅田", "安雄"); String xname1 = x.getName1(); String xname2 = x.getName2(); System.out.println(xname1 + " " + xname2); Person<Integer> y; y = new Person<Integer>(123, 78); Integer yname1 = y.getName1(); Integer yname2 = y.getName2(); System.out.println(yname1 + " " + yname2); Person<Double> z; z = new Person<Double>(5.1, 0.3); Double zname1 = z.getName1(); Double zname2 = z.getName2(); System.out.println(zname1 + " " + zname2); //Person<Integer> w; //w = new Person<Integer>(33, "太郎"); ここでコンパイルエラー //Integer wname1 = w.getName1(); //Integer wname2 = w.getName2(); //System.out.println(wname1 + " " + wname2); Person<String> a = getPersonFromInteger(y); System.out.println(a.getName1() + " " + a.getName2()); Person<String> b = getPersonFromDouble(z); System.out.println(b.getName1() + " " + b.getName2()); } private static Person<String> getPersonFromInteger(Person<Integer> x) { return new Person<String>(x.getName1().toString(), x.getName2().toString()); } private static Person<String> getPersonFromDouble(Person<Double> x) { return new Person<String>(x.getName1().toString(), x.getName2().toString()); } } |
【注意】この章はJava5.0の新機能についての解説です。
〜Generics〜
火星や土星には生物はいないのでしょうか?いるとしたら各自名前は持っているのでしょうか?今回はそんな壮大なロマン(???)のお話です。