classGeneric<T> { static T classVar; // -> T는 객체를 생성할 때 결정 되기 때문에 complie time에 T를 알 수 없다. staticvoidmehtod(T varl){ } // 마찬가지 이유로 complie time에 T를 알 수 없음 }
문법적으로는 문제가 없을 것 같으나, 안정성 문제로 금지됨 -> 암기 요소
Type parameter 의 instance를 생성하는 것은 불가능하다.
Generic type parameter 에 대한 instance checking은 불가능하다.
1 2 3 4 5 6 7 8 9
classGeneric<T> { T memberVar = new T(); // -> 안정성 문제 때문에 불가능 { Object obj = new Object(); if (obj instanceof T) { // not possible instance 체크 불가능
classGenericMethod{ publicstatic <T> T staticMethod(T t){ return t; } publicintmethod(int x){ return x; } public <T> T method(int x){ return x; } public <T> T method(T x){ return x; } }
publicclassGenerics{ publicstaticvoidmain(String[] args){ // Dynamic binding: behavior of method defined on runtim with JIT complication GenericMethod.staticMethod("abcde"); GenericMethod.staticMethod(12345); } }
Wrapper Class
기본형 타입을 객체로 쓰기 위해 있는 클래스
기본형 타입이 허용되지 않는 문법에 기본형 타입을 쓰기 위해서 제공
1 2 3 4 5
publicstatic Integer add(Integer x, Integer y){ return x + y; // 자동으로 기본 자료형으로 변형 및 계산 // 반환시 다시 Autoboxing이 이루어짐 }
여러가지 선언 방법들
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Integer integer = new Integer(10); Interger integer1 = Integer.valueOf(10);
Charactor character = new Character('d'); Charactor character1 = Character.value('f');
// Autoboxing Integer integer2 = 4;
// 문자열 <-> 기본자료형 int x = Integer.parseInt("100"); int y = new Integer("100"); int z = Integer.valueOf("200");
int m = new Integer(10); // 기본 자료형이 필요한 자리에 Wrapper class가 있을 경우 unboxing이 일어난다