不允许访问静态内部接口

时间:2013-08-22 05:34:50

标签: java

我有以下情况。

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

现在,当我尝试从另一个包导入sampleInterface时,jDev说“访问不允许”。可能是什么问题?

4 个答案:

答案 0 :(得分:1)

目前,界面被视为包私有(没有可见性修饰符,因此这是默认值)。将public放在外部类和接口上,它将对其他类可见。

小心 - 如果你遇到必须这样做的情况:

public class Alpha extends Alpha.IAlpha {

    public void doNothing();

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

... 循环继承会出现问题,您的课程将无法编译。实际上,您根本无法使用该界面。

请记住这些规则以暴露接口,类或枚举:

  • 如果您只需要该特定对象的内部类,接口或枚举,那么可以将其声明为静态。

  • 如果您需要可以从那个对象访问的类,接口或枚举,那么最好将其移出内部类,并移动到自己的文件中。

通常,接口被视为符合的API - 除非它们的范围狭窄,否则将它们作为嵌套确实没有任何好处。

答案 1 :(得分:0)

的可见性和公共界面的可见性更改。它肯定会起作用。

答案 2 :(得分:0)

来自Controlling Access to Members of a Class

目前,您的界面被视为无修饰符(包私有),并且只能在自己的包中访问。

因此将其更改为public修饰符。像:

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

答案 3 :(得分:-1)

当您声明没有访问说明符的类时,它是通过package-default。这意味着您只能访问该包中的该类。

如果您想从其他套餐中访问课程,请将课程公开,即

public class SampleClass

同样,在您的情况下,由于您也想要访问界面,您也必须公开该界面。

这将解决您的问题。