AVA - 지네릭스(Generics) (3)
지네릭 클래스의 객체 생성과 사용
class Box<T>{
ArrayList<T> list = new ArrayList<T>();
void add(T item) { list.add(item); }
T get(int i) { return list.get(i); }
ArrayList<T> getList() { return list; }
int size() { return list.size(); }
public String toString(){ return list.toString(); }
}
Box<T>의 객체를 생성할 때는 다음과 같이 한다. 참조변수와 생성자에 대입된 타입이 일치해야 한다.
Box<Apple> appelBox = new Box<Apple>(); //ok
Box<Apple> appleBox = new Box<Grape>(); //에러
두 타입이 상속관계에 있어도 마찬가지이다. Apple이 Fruit 의 자손이라고 가정하자.
Box<Fruit> appelBox = new Box<Apple>(); //에러, 대입된 타입이 다르다.
단, 두 지네릭 클래스의 타입이 상속관계에 있고, 대입된 타입이 같은 것은 괜찮다.
FruitBox는 Box의 자손이라고 가정하자.
Box<Apple> appleBox = new FruitBox<Apple>(); //ok. 다형성
Box<T>의 객체에 'void add(T item)'으로 객체를 추가할 때, 대입된 타입과 다른 타입의
객체는 추가할 수 없다.
Box<Apple> appleBox = new Box<Apple>();
appleBox.add(new Apple()); //ok
appleBox.add(new Grape()); //에러 Apple객체만 추가 가능
그러나 타입 T가 'Fruit'인 경우, 'void add(Fruit item)'가 되므로
Fruit의 자손들은 이 메서드의 매개변수가 될 수 있다. Apple이 Fruit의 자손이라고 가정
Box<Fruit> fruitBox = new Box<Fruit>();
fruitBox.add(new Fruit()); //ok.
fruitBox.add(new Apple()); //ok, void add(Fruit item)
예제)
import java.util.ArrayList;
class Fruit {public String toString() { return "Fruit";}}
class Apple extends Fruit {public String toString() { return "Apple";}}
class Grape extends Fruit {public String toString() { return "Grape";}}
class Toy {public String toString() { return "Toy"; }}
class FruitBoxEx1{
public static void main(String[] args)
{
Box<Fruit> fruitBox = new Box<FruitBox>();
Box<Apple> appleBox = new Box<AppleBox>();
Box<Toy> toyBox = new Box<Toy>();
// Box<Grape> grapeBox = new Box<Apple>(); //에러, 타입 불일치
fruitBox.add(new Fruit());
fruitBox.add(new Apple()); //ok, void add (Fruit item)
appleBox.add(new Apple());
appleBox.add(new Apple());
// appleBox.add(new Toy()); //에러 Box<Apple>에는 Apple만 담을 수 있음
toyBox.add(new Toy());
// toyBox.add(new Apple()); //에러 Box<Toy>에는 Apple만 담을 수 없음
System.out.println(fruitBox);
System.out.println(appleBox);
System.out.println(toyBox);
//main 끝
}
}
class Box<T>{
ArrayList<T> list = new ArrayList<T>();
void add(T item) { list.add(item); }
T get(int i) { return list.get(i); }
int size() { return list.size(); }
public String toString() { return list.toString(); }
}
실행결과
[Fruit, Apple]
[Apple, Apple]
[Toy]
Author And Source
이 문제에 관하여(AVA - 지네릭스(Generics) (3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jo_dbsgh95/JAVA-지네릭스Generics-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)