2017-12-30 35 views
-4

私は私のプログラムでは、配列の内容を操作するためにJava 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や私のプログラムのどこかで "stream"という名前のものを使用しないので、名前の衝突はないと思いますか?

+2

2回目の試行がうまくいかないと思います。おそらく 'import java.util.stream。*;'?ワイルドカードを使用してインポートすると、このパッケージの直接クラスのみがインポートされます。**サブパッケージのクラスではありません。したがって、 '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'クラスがどこかにインポートされているかもしれません。 util。*; 'は完全に動作しました –

答えて

1

2度目の試行(import java.util.stream;)はうまく動作しません。 @ JonSkeetが指摘したように、コンパイルエラーが発生するはずです:error: cannot find symbol。多分あなたはimport java.util.stream.*;でしょうか?

あなたの実際の質問に:
ワイルドカードでインポートした場合、それはアスタリスク(*)文字で、このパッケージの唯一の直接のクラスは、クラスはサブパッケージではなく、インポートされます。したがって、import java.util.*では、ArrayList,LinkedListおよびRandomのようなクラスをインポートします。完全なリストはhereです。 Streamは、サブパッケージjava.util.list.streamパッケージに実際に存在し、import java.util.*;のときにインポートされません。

Streamをインポートするには、import java.util.stream.*;(このパッケージ内のすべてのクラス)またはimport java.util.stream.Stream;(必要なクラスのFQDN)のいずれかを指定できます。

関連する問題