Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调用嵌套接口的方法_Java_Interface - Fatal编程技术网

Java 如何调用嵌套接口的方法

Java 如何调用嵌套接口的方法,java,interface,Java,Interface,我有一个接口IOuter和一个嵌套接口IInner。像 interface IOuter { public void outerA(); interface IInner { public void innerA(); } } IOuter和IInner都有一些setter API。 我创建了嵌套接口,因为setter API只对内部接口有效。 外部接口和内部接口都在一个类中实现,该类不暴露于外部世界。 外部应用程序通过接口IOuter与我们的代码交互。现在的问题

我有一个接口
IOuter
和一个嵌套接口
IInner
。像

interface IOuter {
   public void outerA();
   interface IInner {
      public void innerA();
   }
}
IOuter
IInner
都有一些setter API。
我创建了嵌套接口,因为setter API只对内部接口有效。
外部接口和内部接口都在一个类中实现,该类不暴露于外部世界。
外部应用程序通过接口
IOuter
与我们的代码交互。现在的问题是,由于它们没有嵌套接口的对象,因此无法调用嵌套接口API。

我不想将嵌套接口API移动到外部接口,因为这可能会被误解。

您可以直接调用嵌套接口方法,如下所示

试一试


您可以实现
IOuter
IInner
接口。例如:

public class Test implements IOuter, IOuter.IInner {
    @Override
    public void outerA() {

    }

    @Override
    public void innerA() {

    }
}

内部接口可以用作外部接口的静态成员,也可以直接用作外部接口的静态成员,如下所示: 这里是外部和内部接口的实现

       IOuter o = new A();
        o.outer();

        IOuter.IInner i = new A();
        i.inner();

        //OR 
        IInner i2 = new A();
        i.inner();

这是错误的。
innerA()
实现不会覆盖嵌套接口中的方法定义。使用
@Override
注释进行验证
测试中的
innerA
方法没有覆盖
IInner
接口的
innerA()
。这只是你的类中的某个同名方法。@kocko和R.J感谢你指出错误,更新了代码。你更新了代码,我删除了否决票。在发布之前,请在某些环境中测试您的代码。避免错误很容易。:)是的,我应该在发帖前测试一下,我想问题是我没听懂,或者我问得不对。这两个接口都已经在我们的代码中实现了。外部应用程序不创建直接使用的对象。它是从某人那里得到的。所以它只知道接口。现在,若应用程序需要调用嵌套接口的API,它需要它的对象。为了让它工作,我公开了一个API来获取嵌套接口对象。我不确定这是一种正确的编码方式。那么,除了公开和API以获取嵌套接口对象之外,还有其他方法吗。
       IOuter o = new A();
        o.outer();

        IOuter.IInner i = new A();
        i.inner();

        //OR 
        IInner i2 = new A();
        i.inner();