0

次のような状況があります。

package A;
class SampleClass
{
 static interface sampleInterface
 {
   ....
 }
}

別のパッケージから sampleInterface をインポートしようとすると、jDev は「アクセスが許可されていません」と表示します。何が問題なのですか?

4

4 に答える 4

1

現在、インターフェイスは package-private として表示されます (可視性修飾子がないため、これがデフォルトです)。public外側のクラスとインターフェイスに配置すると、他のクラスから見えるようになります。

注意してください - これをしなければならない状況に巻き込まれた場合:

public class Alpha extends Alpha.IAlpha {

    public void doNothing();

    public static interface IAlpha {
        public void doNothing();
    }
}

...循環継承の問題が発生し、クラスがコンパイルされません。実際、インターフェイスをまったく使用できなくなります。

インターフェイス、クラス、または列挙型を公開する場合は、次の規則に注意してください。

  • その特定のオブジェクトの内部クラス、インターフェイス、または列挙型のみが必要な場合は、それを static として宣言しても問題ありません。

  • そのオブジェクト以外のどこからでもアクセスできるクラス、インターフェイス、または列挙型が必要な場合は、内部クラスから独自のファイルに移動することをお勧めします。

一般に、インターフェイスは準拠する API と見なされます。スコープが非常に狭い場合を除き、インターフェイスを入れ子にするメリットはありません。

于 2013-08-22T05:38:36.307 に答える
-1

アクセス指定子なしでクラスを宣言すると、package-default になります。これは、そのパッケージでのみそのクラスにアクセスできることを意味します。

別のパッケージからクラスにアクセスしたい場合は、クラスをpublicにします。

public class SampleClass

同様に、あなたの場合、インターフェースにもアクセスしたいので、そのインターフェースも公開する必要があります。

これで問題は解決します。

于 2013-08-22T05:45:22.457 に答える