ArrayList<Integer> list1 = new ArrayList<Integer>();
ArrayList<String> list2 = new ArrayList<Integer>();
LinkedList<Double> list3 = new LinkedList<Double>():
LinkedList<Character> list4 = new LinkedList<Character>();
package Generic1;
public class man <T> {
//이름 필드
private T name;
//혈액형 필드
private T bloodtype;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public T getBloodtype() {
return bloodtype;
}
public void setBloodtype(T bloodtype) {
this.bloodtype = bloodtype;
}
}
package Generic1;
public class mainGe {
public static void main(String[] args) {
man<String> man1 = new man<>();
//새로운 객체 생성시 원하는 타입을 부여
man1.setName("King");
man1.setBloodtype("A");
//선언시 스트링 타입으로 선언하여 스트링 데이터를 입력
System.out.println(man1.getName());
System.out.println(man1.getBloodtype());
}
}
package Generic1;
public class man <T, T2> {
//이름 필드
private T name;
//혈액형 필드
private T bloodtype;
private T2 age;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
public T getBloodtype() {
return bloodtype;
}
public void setBloodtype(T bloodtype) {
this.bloodtype = bloodtype;
}
public T2 getAge() {
return age;
}
public void setAge(T2 age) {
this.age = age;
}
}
package Generic1;
public class mainGe {
public static void main(String[] args) {
//새로운 객체 생성시 원하는 타입을 부여
man<String, Integer> man1 = new man<>();
man1.setName("King");
man1.setBloodtype("A");
man1.setAge(25);
System.out.println(man1.getName());
System.out.println(man1.getBloodtype());
System.out.println(man1.getAge());
}
}
package Generic1;
public class Info {
public static <T, T2> void info(T t, T2 t2){
// 타입 파라미터 / 리턴타입 파라미터 or void / 메소드명 매개변수 타입
man<T, T2> man2 = new man<>();
man2.setName(t);
man2.setAge(t2);
System.out.println("나의 이름은 " + man2.getName() + " 입니다.");
System.out.println("나이는 " + man2.getAge() + " 입니다.");
}
}
package Generic1;
public class mainGeneric {
public static void main(String[] args) {
Info.info("King", 25);
}
}
// T와 T의 자손 타입만 가능 (K는 들어오는 타입으로 지정)
<K extends T>
// T와 T의 부모(조상) 타입만 가능 (K는 들어오는 타입으로 지정)
<K super T>
// T와 T의 자손 타입만 가능
<? extends T>
// T와 T의 부모(조상) 타입만 가능
<? super T>
// 모든 타입 가능
<?> // = <? extends Object>
<T extends B> // B와 C타입만 올 수 있음
<T extends E> // E타입만 올 수 있음
<T extends A> // A, B, C, D, E 타입이 올 수 있음
<? extends B> // B와 C타입만 올 수 있음
<? extends E> // E타입만 올 수 있음
<? extends A> // A, B, C, D, E 타입이 올 수 있음
<K super B> // B와 A타입만 올 수 있음
<K super E> // E, D, A타입만 올 수 있음
<K super A> // A타입만 올 수 있음
<? super B> // B와 A타입만 올 수 있음
<? super E> // E, D, A타입만 올 수 있음
<? super A> // A타입만 올 수 있음
참고