6

私はJavaで作業していますが、信じられないほど奇妙なエラーに遭遇しました。私は次のような非常に基本的なクラスを持っています:

public class ClassA{
   private static Logger log = Logger.getLogger(ClassA.class.getName());
   private boolean trace;

   public ClassA(){
      trace = log.isTraceEnabled();
   }

   public void doSomething(){
      //does stuff
   }
}

このクラスは、現在のプロジェクト内で問題なく使用できます。ただし、ローカルリポジトリをビルド、パッケージ化、およびインストールすると(Mavenを使用し、リモートアーティファクトリポジトリはセットアップされません)、他のプロジェクトはこのクラスをインスタンス化できないため、適切に使用できません。私が次のようなことをしようとすると:

ClassA classA = new ClassA();

次のコンパイルエラーが発生します。

ClassA() has private access in [package].ClassA

ローカルリポジトリの.jarを逆コンパイルして、コンストラクターが存在し、パブリックであることを確認しました。また、-Uフラグを使用して更新を強制しましたが、コンパイルは引き続き失敗します。このエラーの原因は何ですか?

4

4 に答える 4

4

クラスパスのどこかに他の ClassA.class ファイルがあるかもしれません。コンストラクターを呼び出せないプロジェクトで使用されているすべての jar を確認してください。そのうちの 1 つに古いバージョンのクラスが含まれている必要があります。

于 2012-09-26T15:15:21.140 に答える
2

私の唯一の考えは、パッケージに問題があるということです。package キーワードを使用して、classA のソース ファイルの先頭でパッケージを定義してください。呼び出すときは、ファイルが include キーワードを含む include リストにあることを確認してください。ClassA がいくつかのデフォルト パッケージに存在し、それがローカルで作成された ClassA クラスを呼び出す代わりに実際に呼び出しているため、エラーが発生している可能性があります。投稿したコードは問題ないようで、変更がリポジトリで有効になっていることを確認するためにすでに再確認しています。

于 2012-09-26T15:13:10.427 に答える
-1

このエラーが発生しました。クラスコンストラクターの代わりに「プライベート」と書きます。

于 2014-02-26T09:59:59.950 に答える