0b : 2진수로 나타내기 위해 숫자 앞에 추가
ex) 0b100011010
_ : 숫자 사이에 구분 표시
ex) int million = 1_000_000
switch-case 문장에 String을 사용할 수 있다
만약 문자열이 null일 경우 NullPointerException 발생하니 주의
switch(employLevel){
case "CEO":
return 10;
case "MANAGER":
return 12;
}
HashMap<String, Integer> map = new HashMap<>();
public class GenericClass <X> {
private X x;
private Object o;
public <T> GenericClass (T t) {
this.o = t;
System.out.println("T type = "
+ t.getClass().getName())
}
public void setValue(X x){
this.x = x;
System.out.println("X type = "
+ x.getClass().getName())
}
}
public class TypeInference {
public static void main(String args[]){
TypeInference type = new TypeInference();
type.makeObject1();
//type.makeObject2();
}
}
public void makeObject1(){
GenericClass<Integer> generic1 =
new <String> GenericClass<Integer>("String");
generic1.setValue(999);
}
// 에러 발생
public void makeObject2(){
// 명시적으로 타입 T에 대해서 선언한 상태에서,
// 타입 X에 대해서는 <>로 선언하면 컴파일 에러가 발생한다.
// 생성자에 있는 new와 클래스 이름 사이에 타입 이름을
// 명시적으로 두려면, <>를 사용하면 안 된다
GenericClass<Integer> generic1 =
new <String> GenericClass<>("String");
generic1.setValue(999);
}
//출력값
T type = java.lang.String
X type = java.lang.Integer
reifiable : 실행시에도 타입 정보가 남아있는 타입
non reifiable : 컴파일시 타입 정보가 손실되는 타입
자바의 제네릭을 사용하면서 발생 가능한 문제 중 하나가 "reifiable 하지 않은 varargs 타입" 이다
Collections 클래스에 addAll() 메소드는 API 문서에
public static boolean addAll(Collection<? super T> c, T... elements) 라고 선언되어 있다.
하지만 가변 매개 변수를 사용할 경우 실제 내부는 Object의 배열로 처리된다. 이렇게 Object 배열로 처리되면 잠재적으로 문제가 발생할 수 있다.
public static <T> boolean
addAll(java.util.Collection c, java.lang.Object[] elements)
EX))
ArrayList<ArrayList<String>> list = new ArrayList<>();
ArrayList<String> newDataList = new ArrayList<>();
newDataList.add("a);
Collections.addAll(list, newDataList);
// warning 발생 !!!
System.out.println(list);
try{
....
}catch(IllegalArgumentException | FileNotFoundException |
NullPointerException exception){
...
}
// scanner를 finally에서 호출할 필요가 없다
try(Scanner scanner = new Scanner(new File(fineName), encoding)){
....
}catch(IllegalArgumentException | FileNotFoundException |
NullPointerException exception){
...
}