2013-09-23 7 views
1

Java7부터 배열 목록의 명시적인 사양이 나쁜 관행으로 간주됩니까? 왜이 버전에서 불필요한 부분입니까?Arraylists의 명시 적 지정

List<String> foo = new Arraylist<String>(); // before 
List<String> bar = new Arraylist<>(); // from Java7 

목록에 정의되어 있기 때문입니까? 감사합니다.

답변

4

Java7 이래로 배열 목록의 명시적인 사양이 좋지 않은 것으로 간주됩니까?

그것은 "나쁜 습관"이 아닙니다. 그것은 조금 길어질 수도 있습니다. 두 문장은 똑같은 효과를 가지고 있기 때문에 그 의미에서 더 긴 버전에는 단점이 없습니다. 기존 코드를 모두 고칠 필요는 없지만 기존 코드를 편집 할 때 더 짧은 형식을 사용하거나 새 코드를 작성할 수 있습니다.

왜이 버전에서 불필요한 부분입니까?

Java 7은 형식 인수를 중복 지정하지 않아도되는 "다이아몬드 연산자"(사실상 연산자가 아님)를 도입했기 때문에. "일반 인스턴스 작성에 대한 유형 추론"에 Oracle documentation에서 :

당신은 컴파일러만큼 형식 매개 변수의 빈 세트 (<>)과 제네릭 클래스의 생성자를 호출하는 데 필요한 유형의 인수를 대체 할 수있다 문맥으로부터 형식 인수를 유추 할 수 있습니다. 이 괄호 쌍은 비공식적으로 다이아몬드라고 불립니다.

언어 관점에서 볼 때 Java 7의 새로운 기능은 아닙니다. 자세한 내용은 the documentation을 참조하십시오.

+0

답변 해 주셔서 감사합니다. 이것은 그것을 완벽하게 요약합니다. 건배! – Dropout

1

나는 그것에게 나쁜 관행을 생각 해달라고, 프로그래머에게 편리 성을 제공하는 자사의 단지 방법은 ..이

Map<List<String>,Map<String,Integer>> superMap = new HashMap<>(); 

이 같은 자바 6

Map<List<String>,Map<String,Integer>> superMap = new HashMap<List<String>,Map<String,Integer>>(); 

로 작성되어 있어야합니다 고려 나중에 일반 대체가 중복되는 경우

1

새 형식은 일부 키 입력을 저장하는 데 도움이됩니다. 그래서 자바 7에서 당신은 다이아몬드 연산자를 사용하는 경우 자동으로 왼쪽에서 유형을 추론합니다

List<String> foo = new Arraylist<String>(); 

컴파일러와 동일한 것으로 간주됩니다

List<String> bar = new Arraylist<>(); 

을 쓸 때.