1. Generic 메소드에 대하여 설명하시오.
- Generic method has type parameter itself. Not from its class.
- The scope of type parameter is only inside the method.
2.Generic(제네릭) 클래스의 타입 인자 제한하는 방법과 효과는?
- extends : The type parameter and child classes of it
- super : The type parameter and parent classes of it
// //code // class GenericClsssExtends { public static void main(String[] args) { GenericNumber<Integer> genericInt = new GenericNumber<Integer>(0); System.out.println(genericInt.instanceOf()); GenericNumber<Double> genericDouble = new GenericNumber<Double>(0.); System.out.println(genericDouble.instanceOf()); //GenericNumber<String> genericString = new GenericNumber<String>(0.); //error: type argument String is not within bounds of type-variable T //System.out.println(genericString.instanceOf()); } } class GenericNumber<T extends Number> { private T t; GenericNumber(T t) { this.t = t; } boolean instanceOf() { return (this.t instanceof Number); } } /*print true true */
3.와일드 카드란?
- Wildcard is similar with type parameter.
- But wildcard can be useful in more flexible ways.
- And more simple relatively.
4.다음 질문에 답하라.
class JClass { static String take(String s[], int index) { if(index > s.length) { System.out.println("인덱스가 범위를 벗어났습니다."); return null; } return s[index]; } }
(1) JClass의 take() 메소드는 무엇을 처리하는 코드인가?
- ArrayIndexOutOfBoundsException
(2) JClass의 take() 메소드가 임의의 타입에 대해 동작하도록 제네릭 메소드로 수정하여 JGenClass를 작성하라. (3) JGenClass를 활용하는 코드 사례를 보여라
// //code // class JGenClass { static <T> T take(T s[], int index) { if(index >= s.length) { System.out.println("인덱스가 범위를 벗어났습니다."); return null; } return s[index]; } } class JGenClassMain { public static void main(String[] args) { String[] arrStr = {"abc", "def"}; Integer[] arrInteger = {0, 1, 2}; JClass.take(arrStr, 4); JGenClass.take(arrStr, 4); JGenClass.take(arrInteger, 4); } } /* 인덱스가 범위를 벗어났습니다. 인덱스가 범위를 벗어났습니다. 인덱스가 범위를 벗어났습니다. */