・パッケージについて教えてください
■質問1
・ArrayListのパッケージは、どうして「java.util.List」ではなくて「java.util.ArrayList」なのでしょうか?
・ArrayListは、Listインターフェイス実装クラスなのでListに紐付いている、と思ったのですが…
・「java/util/List.interface」と「java/util/ArrayList.class」は並列の位置づけになるのでしょうか?
・そういう決まりだから?
・Listインターフェイスのパッケージ名は下記で確認するのでしょうか?
・http://docs.oracle.com/javase/jp/7/api/java/util …
■質問2
・「import java.util.*;」表記ができるなら、全部これで良いようにも思うのですが、どういう風に使い分けるのでしょうか?
・普通はどちらを使う、とかあるのでしょうか?
No.1ベストアンサー
- 回答日時:
■質問1
List インターフェースと ArrayList クラスの両方ともその所属するパッケージは java.util です。java.util.List というパッケージも java.util.ArrayList というパッケージも存在しません。これはそれぞれのインターフェース/クラスの完全限定名というものです。
http://sjc-p.obx21.com/word/jk/fullyqualifiednam …
たしかに List のパッケージ名はあなたが提示されたページで確認できます。ただし、左上に小さく書いてある「java.util」という記述がパッケージ名を表しています。
■質問2
*を使用したインポートはそのパッケージ内にあるすべてのクラス・インターフェースをインポートします。
これは裏を返すとそのソースで実際に使用しないものまでインポートしてしまうことになり、実際に使用されるクラスがなにかをわかりづらくなります。
また、パッケージが Java で導入されたのは C 言語での名前の衝突の多発を反省してのことですが、*を使ってのインポートはその名前の衝突が発生することになります。
したがって、自分は(Eclipse を使用していて、パッケージの整理を Eclipse 任せにしているせいもありますが)積極的に*を使用したインポートを行うケースは稀です。
No.4
- 回答日時:
こんにちは。
c#初心者兼、java始めました です。実はいうと、自分も質問者様のようにjavaを始めた時はimportの書き方で悩んだことがあります。
それはさておき、packageというと、ファイルとフォルダをイメージしてもらうと分かりやすいかと(細かい差はありますが)。
java.util.ArrayListはjavaフォルダの中のutilフォルダの中の、ArrayListファイルだと思ってもらって問題ないかと。
Listも同じjava.utilの中に入っています。
つまり、質問者様の考えている通りListとArrayListの置き場所は同じです。
さらに、Listはファイル(と同じような扱い)なのでその中にArrayListが入ることはできません。
つまり、インターフェイスだろうが、スーパークラスだろうがファイル(のようなもの)なので、関係する他のクラスと同じpackageに入っているということです。
こんな感じ
+java
├util
| ├ArrayList
| ├List
| ├Iterable
| |
| …
|
├lang
| ├String
| ├System
|
├io
続いて、質問2ですが、
> 「import java.util.*;」表記ができるなら…
確かにそうかもしれません。実際、c言語系統(c, c++, c#など)ではまとめてインポートが多いです。
が、一長一短で、まとめてインポートするするのは便利な反面、欠点もあります。
例えばゲームを作るとして、自分でRobotと言うクラスを作っていたとします。そして、ウインドウを使うクラスを作るためにjava.awt.* をインポートしたとします。
すると、Robotを使おうとしたときにエラーが出ます。なぜなら、実はこのRobot、java.awtにも同じ名前のRobotがあるのです(こっちは自動操作ロボットのような感じ)。
つまり、どちらの名前が衝突してどちらのRobotが判別がつかない状態になってしまいます。
解決策としては、自分のRobotクラスの名前を変えるとい方法があります。
しかし、場合によっては不可能なこともあります(既に他のいろいろなプロジェクトで使用済みなど)。
その場合はjava.awt.Frame など、一部の必要なクラスだけをインポートするしかありません。そのための解決策です。
個人的には1つ、2つだけなら、一部だけ、多くなりそうな場合はとりあえずまとめてインポート、被ったら一部だけと使い分けています(それが正しいかどうか分かりませんが)。
お役に立てれば幸いです。
No.3
- 回答日時:
■質問1
>・ArrayListのパッケージは、どうして「java.util.List」
>ではなくて「java.util.ArrayList」なのでしょうか?
ArrayListのパッケージは、「java.util.List」でも「java.util.ArrayList」でもありません。「java.util」です。Listのパッケージも「java.util」です。質問者さんはパッケージというものを理解されていないのですかね。とにかくただの勘違いです。
また、インターフェイスと実装クラスのパッケージが異なることはありえることです。単なるグループ分けの話です。同じパッケージにする事が多いですが実装クラスが多い場合それ用のパッケージを作ることもあります。またグループ分けする人の気分しだいの場合のありますのであまり気にしないほうがいいでしょう。
■質問2
>・「import java.util.*;」表記ができるなら、
>全部これで良いようにも思うのですが、
>どういう風に使い分けるのでしょうか?
>・普通はどちらを使う、とかあるのでしょうか?
まず*を使ってもコンパイラが判断し余計なものはインポートしません。なので、動作を考えた場合にはどちらでも変わりはありません。
また使い分けというものはありません。人によります。いちいち列挙するのが面倒くさい場合や、ソースが長くなるのが嫌な場合に*を使うのでしょう。しかし、何のクラスを使っていかあいまいで不明確になるためそれが好ましくないと考える人もいるでしょう。人の考え方の問題です。
私は明確にしたほうがいいとは思います。仕事でJavaを扱うのであれば明確にした方がいいでしょうね。学生や個人で自分しか見ないプログラムを作るのであれば*でもいいと思います。
Eclipseを使っている場合にはCtrl+oで一発で整理できますので、個人的な趣味でやっているという場合でもない限りは明示するクセをつけた方がいいように思います。
・回答ありがとうございました
>単なるグループ分けの話です
・なるほど
>*を使ってもコンパイラが判断し余計なものはインポートしません。なので、動作を考えた場合にはどちらでも変わりはありません
・初めて知りましたー
No.2
- 回答日時:
インタフェース実装とパッケージは直接関係ありません。
例を挙げると、java.lang.Runnableというインタフェースはjava.lang.Thread、java.util.TimerTask、javax.swing.SwingWorkerなどによって実装されていますが、これだけを見ても、それぞれのクラスが所属するパッケージはバラバラであることが分かります。
逆に、java.util.ArrayListクラスはjava.util.List以外にもjava.io.Serializableやjava.lang.Cloneableなどのインタフェースも実装しています。したがって、インタフェースの実装関係に基づいてArrayListが所属するパッケージを決めることは不可能なのです (一つのクラスは複数のパッケージに所属できない)。
・回答ありがとうございました
>インタフェース実装とパッケージは直接関係ありません
>それぞれのクラスが所属するパッケージはバラバラであることが分かります
・実例を挙げていただいたので分かりやすかったです
・大変参考になりましたー
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- その他(IT・Webサービス) html cssについて 3 2023/05/13 12:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
java eclipse 型に解決できません
-
グローバルIPとプライベートIP...
-
「天声人語」をインターネット...
-
3年間同じクラスになる確率
-
下記の問合せを行うクエリを、P...
-
サーブレット実行時のエラー
-
配列の重複する値とその個数を...
-
IPアドレスのクラスAを取得して...
-
自作のクラスファイルがインポ...
-
javaで画像ファイルの入出力方法
-
packageとimport の違いって?
-
tomcat上でのpropertiesファイ...
-
C#で OpenSSLで3DES
-
体育祭クラス全員参加のムカデ...
-
エクセルVBAでのwitheventsにつ...
-
河合塾のクラス分けについて
-
ASP.NETでのジェネリックの利用
-
クラスにアクセスできません。
-
複数のクラスで共通した関数を...
-
内部クラスを別ファイルに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
私はクラスLINEにまだ入れてな...
-
老い先短い ジジィ が ふと 思う...
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
main()を持つクラスが2つ以上...
-
数学の計算問題。 3年間同じク...
-
クラス見てから 女の子5人 ネタ...
-
javaのコンパイルができません...
-
1 つのヘッダファイルに複数の...
-
重複エラーを解決するには
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
おすすめ情報