21.01.19-40日目
👸 Generics
コンパイル時にタイプをチェックできる
🤴 タイプ変数
ex>
public class ArrayList<E> extends AbstractList<E> {
private transient E[] elementData;
public boolean add(E o) { /* 내용 생략 */}
public E get(int index) { /* 내용 생략 */}
}
🤴 ギネス世界記録用語
Box<T> 지네릭 클래스. 'T의 Box' 또는 'T Box'라고 읽는다.
T 타입 변수 또는 매개변수.(T는 타입 문자)
Box 원시 타입(raw type)
🤴 ムカデ型と多形性
ArrayList<Tv> list = new ArrayList<Tv>(); // 일치
ArrayList<Product> list = new ArrayList<Tv>(); // 불일치. 에러
List<Tv> list = new ArrayList<Tv>(); // OK. 다형성. ArrayList가 List를 구현
List<Tv> list = new LinkedList<Tv>(); // OK. 다형성. LinkedList가 List를 구현
ArrayList<Product> list = new ArrayList<Product>();
list.add(new Product());
list.add(new Tv()); // Ok
list.add(new Audio()); // Ok
🤴 限られたギネス類
class FruitBox<T extends Fruit>{ // Fruit의 자손만 타입으로 지정가능
ArrayList<T> list = new ArrayList<T>();
...
}
-
FruitBox<Apple> appleBox = new FruitBox<Apple>(); // OK
FruitBox<Toy> appleBox = new FruitBox<Toy>(); // 에러. Toy는 Fruit의 자손X.
interface Eatable{}
calss FruitBox<T extends Eatable> {...}
🤴 ギネス世界記録の制限
Box<Aapple> appleBox = new Box<Apple>(); // Ok. Apple객체만 저장가능
Box<Grape> appleBox = new Box<Grape>(); // Ok. Grape객체만 저장가능
タイプ変数は、(静的メンバーはすべてのインスタンスで共通)
class Box<T> {
static T item; // 에러
static int compare(T t1, T t2) {...} // 에러
}
(使用可能なタイプ変数宣言アレイ)
class Box<T>{
T[] itemArr; // Ok. T타입의 배열을 위한 참조변수
...
T[] toArray(){
T[] tmpArr = new T[itemArr.length]; // 에러. 지네릭 배열 생성불가
// new 연산자 다음에 T 쓸 수 없다.
}
}
🤴 ワイルドカード<?>
<? extends T>
ワイルドカードの上限制限.Tとその子孫だけを許す<? super T>
ワイルドカードの下限.Tとその祖先だけが<?>
に制限はありません.すべてのタイプが可能です.と同じex>
ArrayList<? extends Product> list = new ArrayList<Tv>(); // Ok
ArrayList<? extends Product> list = new ArrayList<Audio>(); // Ok
ArrayList<Product> list = new ArrayList<Tv>(); // 에러. 대입된 타입 불일치
🤴 ギネス世界記録
static <T> void sort(List<T> list, Comparator<? super T> c)
<T>
とメソッドタイプパラメータ<T>
はそれぞれclass FuritBox<T>{ // 지네릭 클래스
...
static<T> voic sort(List<T> list, Comparator<? super T> c){ // 지네릭 메서드
}
}
🤴 ムカデ形変換
Box<Object> obj = null;
Box box = (Box)objBox; // Ok. 지네릭 타입 -> 원시 타입. 경고발생
objBox = (Box<Object>)box; // OK. 원시 타입 -> 지네릭 타입. 경고발생
🤴 ムカデタイプの除去
👶 ソース
JAvaの定式書&youtube
Reference
この問題について(21.01.19-40日目), 我々は、より多くの情報をここで見つけました https://velog.io/@ham6482/21.01.19-40일차-xdl5iz73テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol