次のような状況があります。
package A;
class SampleClass
{
static interface sampleInterface
{
....
}
}
別のパッケージから sampleInterface をインポートしようとすると、jDev は「アクセスが許可されていません」と表示します。何が問題なのですか?
次のような状況があります。
package A;
class SampleClass
{
static interface sampleInterface
{
....
}
}
別のパッケージから sampleInterface をインポートしようとすると、jDev は「アクセスが許可されていません」と表示します。何が問題なのですか?
現在、インターフェイスは package-private として表示されます (可視性修飾子がないため、これがデフォルトです)。public
外側のクラスとインターフェイスに配置すると、他のクラスから見えるようになります。
注意してください - これをしなければならない状況に巻き込まれた場合:
public class Alpha extends Alpha.IAlpha {
public void doNothing();
public static interface IAlpha {
public void doNothing();
}
}
...循環継承の問題が発生し、クラスがコンパイルされません。実際、インターフェイスをまったく使用できなくなります。
インターフェイス、クラス、または列挙型を公開する場合は、次の規則に注意してください。
その特定のオブジェクトの内部クラス、インターフェイス、または列挙型のみが必要な場合は、それを static として宣言しても問題ありません。
そのオブジェクト以外のどこからでもアクセスできるクラス、インターフェイス、または列挙型が必要な場合は、内部クラスから独自のファイルに移動することをお勧めします。
一般に、インターフェイスは準拠する API と見なされます。スコープが非常に狭い場合を除き、インターフェイスを入れ子にするメリットはありません。
アクセス指定子なしでクラスを宣言すると、package-default になります。これは、そのパッケージでのみそのクラスにアクセスできることを意味します。
別のパッケージからクラスにアクセスしたい場合は、クラスをpublicにします。
public class SampleClass
同様に、あなたの場合、インターフェースにもアクセスしたいので、そのインターフェースも公開する必要があります。
これで問題は解決します。