2017-12-30 17 views
-4

내 프로그램에 배열의 내용을 조작하는 자바 (8)의 Stream 기능을 사용하고 있습니다 :import java.util. *;의 차이점은 무엇입니까? import java.util.stream ;?

Obstacle[] closestObstacles = Stream.generate(() -> new Obstacle()).limit(8).toArray(Obstacle[]::new); // one for each line of attack 

이 같은 Stream 가져보십시오 : import java.util.*;는 나는 "스트림 해결할 수없는 기호"오류가 발생합니다. 대신 Stream을 다음과 같이 가져 오면 : java.util.stream; 일이 예상대로 작동합니다. 왜 이런 일이 생길까요? Stream 또는 내 프로그램의 다른 곳에서 "스트림"이라는 이름을 사용하지 않으므로 이름 충돌이라고 생각하지 않습니까?

+2

두 번째 시도가 작동하지 않을지 의심 스럽습니다. 어쩌면'import java.util.stream. *;'? 와일드 카드를 사용하여 가져 오는 경우이 패키지의 직접 클래스 만 가져 오며 ** 하위 패키지의 클래스는 가져 오지 않습니다 **. 따라서'import java.util. *'을 사용하면 [여기] (https://docs.oracle.com/javase/9/docs/api/java/util/package-summary.html)에 나열된 모든 클래스와 인터페이스를 가져올 수 있습니다.). 'Stream' 클래스는 실제로 ['java.util.list.stream' 패키지] (https://docs.oracle.com/javase/9/docs/api/java/util/stream/package-summary)에 있습니다. html). – Turing85

+0

실제로'java.util.stream. * '을 임포트하면'java.util.stream' 패키지의 모든 것을 임포트합니다. 'java.util.stream'을 가져 오는 것이 실패합니다 :'error : 심볼을 찾을 수 없습니다' –

+0

어딘가에 다른'Stream' 클래스가 있거나 ('Package' 클래스가 있습니다) 그렇지 않으면'import java. util. *;'는 완벽하게 작동했을 것입니다 –

답변

1

두 번째 시도 (import java.util.stream;)가 작동하지 않을 것으로 생각됩니다. @ JonSkeet이 지적한대로 컴파일 오류가 발생합니다 : error: cannot find symbol. 어쩌면 너 import java.util.stream.*;일까요? 실제 질문에

: 와일드 카드로 가져 오는 경우
, 즉 별표 서브 패키지에서 (*) 문자,이 패키지 에만 직접 클래스를 가져옵니다 아닌 클래스입니다. 따라서 import java.util.*을 사용하면 ArrayList, LinkedListRandom과 같은 클래스를 가져올 수 있습니다. 전체 목록은 here입니다. Stream 클래스는 실제로 하위 패키지 java.util.list.stream 패키지에 있으며 import java.util.*; 일 때 가져올 수 없습니다.

Stream을 가져 오려면 중 하나를 수행 할 수 있습니다 import java.util.stream.*; (이 패키지 내의 모든 클래스) 또는 전용 import java.util.stream.Stream; (당신이 필요로하는 클래스의 FQDN).

관련 문제