자바의 숨겨진 기능
* 개요
새로 생겼거나, 숨겨져 있었거나, 아니면 다들 아는데 나만 몰랐거나 하는 기능들.
- 다음 링크들을 주로 정리한 것이다
http://whiteship.tistory.com/1925?category=56999
https://stackoverflow.com/questions/15496/hidden-features-of-java
- 다 정리하려 했는데 너무 많아서 흐지부지...
* 이중 괄호 초기화
List 선언 후 항상
lst.add(1);
lst.add(2);
이렇게 선언하던걸 다음과 같이 선언 가능
lst = new ArrayList<Integer>()
{{ add(1); add(2); }};
- 이게 되는건 사실 생성자 이외에 이런 초기화가 가능하기 때문...
https://stackoverflow.com/a/47493
- Arrays.asList() 이용한 방법
lst = Arrays.asList(1,2);
* 제네릭의 상위 타입 제한
다음과 같이 MyList 의 제네릭을 List 와 Set 으로 제한하면
MyList<ArrayList> 나 MyList<HashSet> 은 불가능하며
class MyList<T extends List & Set>
아래와 같이 둘다 상속한 경우는 이용 가능하다
interface ListSet extends List, Set {
...
}
public static <A, B extends Collection<A> & Comparable<B>>
boolean foo(B b1, B b2, A a) {
return (b1.compareTo(b2) == 0) || b1.contains(a) || b2.contains(a);
}
다음과 같이 foo() 란 메서드를 선언하며 파라메터로 들어올 b1, b2, a 에 대해 정의할 수도 있다.
* instanceof 는 Null 검사할 필요 없어
if( null != aObject && aObject instanceof String )
사실 null != aObject && 은 지워도 정상작동함
* forEach (자바 8 이상)
for(a : intList) { ... }
다음과 같이 표현 가능 (자바 8 이상)
intList.forEach(a -> System.out.println(a));
* 가변인수 (자바 5 이상)
http://gyrfalcon.tistory.com/entry/Java-Varargs?category=535624
method(new Integer() {1,2,3}) 대신
method(1,2,3) 가능
* Enum의 초기화
enum의 각 요소에 생성자 이용하여 Int 값을 지정 가능
https://stackoverflow.com/a/52914
* 맵 생성을 다음과 같이 가능
Map m = Collections.<String,Integer>emptyMap();
* 익명 subclass 가능
https://stackoverflow.com/a/1025199
*Unsafe
http://rangken.github.io/blog/2015/sun.misc.unSafe/
http://www.docjar.com/html/api/ClassLib/Common/sun/misc/Unsafe.java.html
sun.misc.Unsafe 클래스는 메모리 접근 등 위험한 메서드들을 모아놓은 클래스이다.
생성자 호출 없이 객체 생성하거나, 메모리 직접 접근하거나 등
성능향상 가능하지만 위험한 기능들을 묶어놓고 있다.
- 제거 계획도 있는듯..
https://diveintodata.org/2015/07/15/removal-of-unsafe-in-java9/
* 스트링을 여러줄에 걸쳐 사용 (자바의 기능 아님)
여러줄에 걸쳐 String 쓸때 "..." + "..." + ... 반복해야 했는데
이를 @Multiline 이란 어노테이션 이용해서 해결하는 라이브러리에 대한 설명.
-- 편집
http://blog.daum.net/dogcowking/166