0

最近、私には少し奇妙に思える問題が発生しました。

事前定義されたクラスを使用するために、foo.jarbar.jarという2つの.jarファイルをインポートしました(どちらも他の人が作成したものです)

そして私のソースコードは次のようなものです:

package jerry.deque
public class Deque {
    .....
    .....
    Foo item = new Foo();   //Already defined in the foo.jar
    .....
}

EclipseでJarをインポートする方法とまったく同じように外部ライブラリを追加しまし た。しかし、foo.jarで定義されたクラスを使用しようとすると、 Eclipseは「Fooを型に解決できない」と表示します。

この問題を修正するために多くの時間を費やし、クラスファイルの先頭にある「packagejerry.deque」という句を削除した後、最終的に成功しました。

ほんの数日前にAndroidの開発を行っていたときに、同じ方法でTwitter APIライブラリを追加したので、これは奇妙だと思います。また、.javaファイルの先頭で「packagejerry.search_twittes」と宣言した場合でも正常に動作します。私はこの問題に混乱していて、何が悪いのか理解できませんでした。誰かが私にそれを詳細に説明するのを手伝ってもらえますか?どうもありがとう。

4

2 に答える 2

0

Check that Foo is same package as Deque class。同じパッケージでない場合は、FooクラスをDequeクラスにインポートする必要があります。

例えば、

package jerry.deque;
import packagename.foo; // packagename.foo
public class Deque {
    .....
    .....
    Foo item = new Foo();   //Already defined in the foo.jar
    .....
}

説明を追加

Fooクラスのアクセス修飾子をよく確認してほしい。

トップレベル(クラス)のアクセス制御には2つのアクセスレベルがあります。これらはパブリック、またはパッケージプライベート(明示的な修飾子なし)です。

Fooクラスはデフォルトパッケージ(指定されていないパッケージ)の下にあり、明示的なアクセス修飾子ではない可能性があります。そう願っています!その後、デフォルトパッケージのすべてのクラスがFooクラスにアクセスできます。そのため、パッケージjerry.deque句を削除すると、機能します。

同様に、「packagejerry.search_twittes」を宣言しても正常に動作するAndroid開発Javaコードを確認してほしい。その場合、Twitter APIライブラリのアクセス修飾子内のクラスは公開されているため、どこからでもアクセスできます。

詳細については、これを読むことができます。この情報は役に立ちますか?

于 2013-03-14T05:18:36.050 に答える
0

Fooはデフォルトのパッケージに含まれています。デフォルトパッケージのクラスを直接インポートすることはできません。したがって、コード内のパッケージ宣言を削除しても、エラーは発生しません。リフレクションAPIを探すか、そのクラスのデフォルトパッケージにプロキシを書き込むことができます。

于 2013-03-14T08:20:43.803 に答える