• ベストアンサー

無名パッケージのクラス

パッケージ化されたクラス(pacA.ClassA)から、無名パッケージ(ClassB)のクラスを参照できるのでしょうか。 状況を詳しく書きますと、 ClassB はコンパイル済みで、pacA.ClassA の中で ClassB を new しています。 pacA.ClassA をコンパイルしたいのですが、ClassB を import できません(コンパイルエラー)。 それとも、ClassB は import する必要がなく、単に私のコンパイルの仕方(classpathの通し方等)が悪かったのでしょうか。 どなたか教えて頂けませんか。

質問者が選んだベストアンサー

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

古いバージョンのコンパイラならば package pacA; import ClassB; class ClassA {   public ClassA() {     ClassB b=new ClassB();   } } とすれば、packA.ClassAから名無しパッケージの ClassBを呼び出してコンパイル可能だったのです けど、どうも最新のコンパイラでは出来なくなって いるようですねぇ、、、実行は出来るようですが。 元々「このような呼び出しは推奨されない」って事だった ので恐らくは「出来ないようにした」のではないかと。 もしかすると別の方法で実現できる可能性も在るかも しれませんが、私にはチョット分かりません。 どうしてもというなら、古いJDKをダウンロードしてきて 試してみてはいかがでしょうか(JDK1.2なら出来るはず)

masa1214
質問者

お礼

ようやく謎が解けました! import ClassB; のように書いている本があるのに、なぜ自分の場合はできないのだろうって思っていました。バージョンの違いだったんですね。 ご回答ありがとうございました。

その他の回答 (1)

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.2

参考URLの8.の(後半)部分を参照してみてください。 JDK1.4からコンパイラが厳密になったため、パッケージ名をつけないクラスはインポートできないようになっています。 つまるところ 「パッケージ名をつけないクラスは、使い捨てで、その場限りの使い方しかできないものだ。」というわけです。 他から使用したいのであればパッケージ名をつけるべきなようです。

参考URL:
http://java.sun.com/j2se/1.4/ja/compatibility.html
masa1214
質問者

お礼

参考URLのほう拝見させて頂きました。 コンパイラの仕様が変わっていたとは・・。 謎が解けてスッキリしました。 どうもありがとうございました。

関連するQ&A