簡體   English   中英

不允許訪問靜態內部接口

[英]Access not allowed to a static inner interface

我有以下情況。

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();
    }
}

...您將遇到循環繼承問題,並且您的類無法編譯。 實際上,您將根本無法使用該界面。

請記住以下規則以公開接口,類或枚舉:

  • 如果您只需要該特定對象的內部類,接口或枚舉,則可以將其聲明為靜態。

  • 如果你需要一個類,接口,或枚舉從任何地方訪問,但該對象,那么最好將其移出內部類,並轉化為自己的文件。

通常,接口被視為要遵循的API-將它們嵌套是沒有任何好處的,除非它們的范圍非常狹窄。

更改類的可見性以及對公眾的界面。 它肯定會工作。

控制對類成員的訪問

當前,您的界面被視為沒有修飾符(package-private) ,並且只能在其自己的包中進行訪問。

因此,將其更改為public修飾符。 喜歡:

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

當您聲明一個沒有訪問說明符的類時,默認情況下它是程序包默認值。 這意味着您只能在該程序包中訪問該類。

如果要從另一個包訪問類,則將類設為public ,即

public class SampleClass

同樣,在您的情況下,也要訪問該接口,則必須將該接口也公開。

這樣可以解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM