Generic class
1public class Box<M, I> {
2 private M material;
3 private I item;
4 ...
5}
6
7Box<Paper, String> box = new Box<Paper, String>();
Generic Function
1public class CoffeeMachine {
2 public <T> Coffee makeCoffee(T capsule) {
3 return new Coffee(capsule);
4 }
5}
6CoffeeMachine coffeeMachine = new CoffeeMachine();
7Colombian capsule = new Colombian();
8coffeeMachine.<Colombian>makeCoffee(capsule);
9coffeeMachine.makeCoffee(capsule);
Restrictions on Generics
1// BoxMaterial을 상속 받았으면서 Hard(인터페이스)를 구현한 클래스만 가능
2public class Box<M extends BoxMaterial & Hard>
3// BoxMaterial의 조상 클래스만 가능
4public class Box<T super BoxMaterial>
Whild Card
1// T와 그 자손만 가능
2<? extends T>
3// T와 그 조상만 가능
4<? super T>
5// 모두 가능
6<?>