제한된 지네릭 클래스, 지네릭스의 제약
반응형
제한된 지네릭 클래스
- extends로 대입할 수 있는 타입을 제한
타입 변수에 대입할 수 있는 타입을 제한 시킬 수 있는데,
extends를 이용하여 지정한 것의 자손만 타입으로 지정가능하도록 만들 수 있다.
위의 코드는, Fruit의 자손인 타입만 타입변수로 대입할 수 있도록 제한 한 것이다.
그러면, Apple이 Fruit의 자손이라고 했을 때,
대입된 타입 T는 Fruit의 자손이어야하므로, Apple을 대입할 수 있다.
그런데, Toy는 Fruit의 자손이 아니므로 에러가 발생한다.
- 인터페이스인 경우에도 extends를 사용
인터페이스를 구현한 경우로 제한할 때도, extends를 쓴다. implements가 아니라 extends를 사용하는 것에 주의하자.
[Ex12_3]
지네릭스의 제약
- 타입 변수에 대입은 인스턴스 별로 다르게 가능
class Box<T> {} 에서 T는 인스턴스마다 다르게 대입할 수 있다.
즉, 인스턴스를 생성할 때마다 타입 변수를 다르게 지정할 수 있다.
- static멤버에 타입 변수 사용 불가
static멤버에는 타입 변수를 사용할 수 없다. 사용하면 에러가 난다.
왜냐하면,타입 변수는 인스턴스마다 다르게 지정할 수 있는데,
static 멤버는 모든 인스턴스에 공통으로 적용되는 멤버기 때문이다.
- 객체/배열 생성할 때 타입 변수 사용불가. 타입 변수로 객체/배열 선언은 가능
배열을 생성할 때 타입 변수를 사용할 수 없다.
타입 변수로 배열을 선언하는 것은 가능하다.
<T>가 있을 때 new T처럼 new 다음에 타입변수가 오면 안된다.
객체 생성이나, 배열을 생성할 때 둘다 안된다.
new 연산자는 뒤에 타입이 확정되어 있어야한다. 그런데<T>는 아직 어떤 타입이 올지 모르기 때문에 안된다.
반응형
'JAVA' 카테고리의 다른 글
지네릭 타입의 형변환, 지네릭 타입의 제거 (0) | 2022.05.07 |
---|---|
와일드 카드, 지네릭 메서드 (0) | 2022.05.07 |
Iterator, HashMap과 지네릭스 (0) | 2022.05.04 |
지네릭스 용어, 지네릭 타입과 다형성 (0) | 2022.05.04 |
타입 변수 (0) | 2022.05.04 |
댓글
이 글 공유하기
다른 글
-
지네릭 타입의 형변환, 지네릭 타입의 제거
지네릭 타입의 형변환, 지네릭 타입의 제거
2022.05.07 -
와일드 카드, 지네릭 메서드
와일드 카드, 지네릭 메서드
2022.05.07 -
Iterator, HashMap과 지네릭스
Iterator, HashMap과 지네릭스
2022.05.04 -
지네릭스 용어, 지네릭 타입과 다형성
지네릭스 용어, 지네릭 타입과 다형성
2022.05.04