20: JAVA generic2

jk·2024년 1월 26일
0

kdt 풀스택

목록 보기
37/127



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);
    }
}
/*
인덱스가 범위를 벗어났습니다.
인덱스가 범위를 벗어났습니다.
인덱스가 범위를 벗어났습니다.
*/
profile
Brave but clumsy

0개의 댓글