예제
<aside> 🎯
package generic.ex4;
import generic.animal.Animal;
public class AnimalMethod {
public static <T extends Animal> void checkup(T t) {
System.out.println("동물 이름 : " + t.getName());
System.out.println("동물 크기 : " + t.getSize());
t.sound();
}
public static <T extends Animal> T getBigger(T t1, T t2) {
return t1.getSize() > t2.getSize() ? t1:t2;
}
}
------------------------
package generic.ex4;
import generic.animal.Cat;
import generic.animal.Dog;
public class MethodMain2 {
public static void main(String[] args) {
Dog dog = new Dog("멍멍이", 100);
Cat cat = new Cat("냐옹이", 100);
AnimalMethod.checkup(dog);
AnimalMethod.checkup(cat);
Dog targetDog = new Dog("큰 멍멍이", 200);
Dog bigger = AnimalMethod.getBigger(dog, targetDog);
System.out.println("bigger = " + bigger);
}
}
</aside>
제네릭 타입과 제네릭 메서드의 우선순위
<aside> 🎣
package generic.ex4;
import generic.animal.Animal;
public class ComplexBox<T extends Animal> {
private T animal;
public void set(T animal){
this.animal = animal;
}
public <T> T printAndReturn(T t) {
System.out.println("animal.className : " + animal.getClass().getName());
System.out.println("t.className : " + t.getClass().getName());
return t;
}
}
----------------------------
package generic.ex4;
import generic.animal.Cat;
import generic.animal.Dog;
public class MethodMain3 {
public static void main(String[] args) {
Dog dog = new Dog("멍멍이", 100);
Cat cat = new Cat("냐옹이", 50);
ComplexBox<Dog> hospital = new ComplexBox<>();
hospital.set(dog);
Cat returnCat = hospital.printAndReturn(cat);
System.out.println("returnCat = " + returnCat);
}
}
출력
animal.className : generic.animal.Dog //ComplexBox의 printAndReturn 호출
t.className : generic.animal.Cat ////ComplexBox의 printAndReturn 호출
returnCat = Aniaml{name='냐옹이', size=50} //return받아 MethodMain3 호출,
//그대로 본인 값을 출력
//toString() 존재하여 해당 틀 존재
</aside>