upcasting 시 문제없음
downcasting 시 문제 발생
해결방법 1 : 내용물의 타입 알기(제네릭 활용)
해결방법 2 : 강제타입변환
제네릭 : 구현부에서 사용, object 타입 객체 사용
<?> : 모두 제한없음
public class Course {
//모든 사람이면 등록 가능
public static void registerCourse1(Applicant<?> // applicant) {
System.out.println(applicant.kind.getClass().getSimpleName() +
"이(가) Course1을 등록함");
}
//학생만 등록 가능
public static void registerCourse2(Applicant<? extends Student> applicant) {
System.out.println(applicant.kind.getClass().getSimpleName() +
"이(가) Course2를 등록함");
}
//직장인 및 일반인만 등록 가능
public static void registerCourse3(Applicant<? super Worker> applicant) {
System.out.println(applicant.kind.getClass().getSimpleName() +
"이(가) Course3을 등록함");
}
}
자바가 제공해주는 상당수의 라이브러리가 이 표현을 사용한다.
따라서 해석할 수 있어야 한다.
리턴타입 메소드명(