특정 타입을 외부에서 사용자에 의해 지정
<T>
: Type<E>
: Element<K>
: Key<V>
: Value<N>
: Number// 블럭 안에서만 유효함
class Foo <T> { ... }
class Foo <Bar> { ... }
class Foo <T, K> {
T member1;
K member2;
}
Foo<String> foo = new Foo<String>();
[접근제어자] <제네릭타입> [반환타입] [메소드명]([제네릭타입] [파라미터])
public <T> T foo(T bar) { ... }
class Foo<E> {
// 위의 E와 다른 타입
static <E> E bar(E bar) { ... }
}
Foo<String> foo = new Foo<String>(); // E = String
Foo.bar(1L) // E = Long
// T와 T의 자식 타입만 가능
<K extends T> // 정의되는 타입을 K로 지정
<? extends T> // 따로 generic 지정하지 않음
<K super T> // T와 T의 부모 타입만 가능
<?> // 모든 타입 가능 (= <? extends Object>)