- 타입파라미터 즉, 제네릭타입의 배열은 직접 new 연산자로 생성이 불가능하다!
따라서, 아래와 같은 순서로 생성해야 한다.
(1) Object[] 타입의 배열을 먼저 생성한다.
(2) (T[]) 강제 형변환하여 초기화 수행해야 한다.
(+) . 매개변수를 통해 인자값으로 배열의 길이를 받도록 하자!!
아래 예시를 통해 와일드카드의 사용에 대해 직접 확인해보자!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | public class WildCardExample { //모든 사람을 대상으로 하는 교육과정 내역 출력 public static void printCourse(Course<?> course) { log.info( course.getName() + "수강생"+ Arrays.toString(course.getStudents()) ); //info } //printCourse //학생을 대상으로 하는 교육과정의 내역 출력 public static void printCourseStudent( Course<? extends Student> course) { log.info( course.getName() + "수강생"+ Arrays.toString(course.getStudents()) ); //info } ///printCourseStudent //근로자를 대상으로 하는 교육과정의 내역 출력 public static void printCourseWorker( Course<? super Worker> course) { log.info( course.getName() + "수강생"+ Arrays.toString(course.getStudents()) ); //info } ///printCourseStudent public static void main(String[] args) { //1. 일반인을 대상으로 하는 교육과정을 생성, 이 때 "구체타입" 지정 Course<Person> personCourse = new Course<>("일반인과정", 5); //타입추론 personCourse.add(new Person("일반인")); personCourse.add(new Worker("직장인")); personCourse.add(new Student("학생")); personCourse.add(new HighStudent("고등학생")); //2. 직장인을 대상으로 하는 교육과정을 생성, 이 때 "구체타입" 지정 Course<Worker> workerCourse = new Course<>("직장인과정", 5); //타입추론 // workerCourse.add(new Person("일반인")); //worker 구체타입이기 때문에 XX // workerCourse.add(new Student("학생")); //worker 구체타입이기 때문에 XX workerCourse.add(new Worker("직장인")); Course<? extends Person> course2 = personCourse; //Course<Person>타입이 대입되어 Course<?>타입이 됨! Course<? extends Person> course3 = workerCourse; //Course<Person>타입이 대입되어 Course<?>타입이 됨! //다형성과 다르기 때문에 구분하기!! //3. 학생을 대상으로 하는 교육과정을 생성, 이 때 "구체타입" 지정 Course<Student> studentCourse = new Course<>("학생과정", 5); //타입추론 studentCourse.add(new Student("학생")); studentCourse.add(new HighStudent("고등학생")); //다형성 1- 부모타입은 자식타입을 품을 수 있다! //4. 고등학생을 대상으로 하는 교육과정을 생성, 이 때 "구체타입" 지정 Course<HighStudent> highStudentCourse = new Course<>("고등학생과정", 5); //타입추론 highStudentCourse.add(new HighStudent("고등학생")); printCourse(personCourse); printCourse(workerCourse); printCourse(studentCourse); printCourse(highStudentCourse); log.info("******************************"); // printCourseStudent(personCourse); //수용XX // printCourseStudent(workerCourse); //수용XX printCourseStudent(studentCourse); printCourseStudent(highStudentCourse); log.info("******************************"); printCourseWorker(personCourse); printCourseWorker(workerCourse); // printCourseWorker(studentCourse); //수용XX // printCourseWorker(highStudentCourse); //수용XX } //main } //end class | cs |
JAVA 13-2. 람다식 - 표준 API의 함수적 인터페이스 (0) | 2021.06.29 |
---|---|
JAVA 13-1. 람다식(Lambda Expressions) (0) | 2021.06.28 |
JAVA 11. 예외처리 (try-catch / throws / try-with-resources) (0) | 2021.06.24 |
JAVA 10-2. 익명 객체 (익명 자식객체 / 익명 구현객체) (0) | 2021.06.23 |
JAVA 10-1. 추상클래스와 인터페이스 비교(공통점/차이점) (0) | 2021.06.23 |