这段代码中嵌套接口的作用是什么?

7
我已经查看了以下链接:为什么在Java中使用静态嵌套接口?
在我的代码库中,我有:
public interface I1{

   public static interface I2 {
        public void doSomething();
   }

    //some other methods

    public void myMethod(I2 myObject); 
}

在不同包中的某个其他类中:

(注:该段内容为HTML标签,无需翻译)

public abstract class SomeClass implements I2{
   //mandatory method...
}

现在,我的问题是 - “将I2放在I1中真的是一个好设计吗?”?
编辑:
public interface XClientSession {
static public interface OnQueryResultSentListener {

        public void onQueryResultSent(XQueryResult result);
    }
 public void setOnQueryResultSentListener(OnQueryResultSentListener listener);

}

/ 而在另一个文件中,我有...

 public abstract class XAppAgentBase extends IntentService 
    implements XClient, OnQueryResultSentListener {
    }

你确定 SomeClass 实现了 "I2" 接口吗?我认为它应该实现 "I1.I2" 才能引用内部接口。 - Patricia Shanahan
@TheLostMind,你可以展示接口和方法的实际名称,而不是改写你的代码吗?这样可能会使问题(和答案)更相关。 - mrjink
在这种情况下,这是有意义的,因为OnQueryResultSentListener只会被实现XClientSession的类使用。它可以用来显示两者之间的关系,并且您不太可能需要没有XClientSessionOnQueryResultSentListener - mrjink
@mrjink - XAppAgentBase没有实现XClientSession.. 它实现了XClient. - TheLostMind
1
这是例子: Map.Entry - Not a bug
显示剩余6条评论
2个回答

1

在内部接口中不需要使用static关键字,因为在接口内声明的接口默认为静态,类似于在接口中定义的变量默认为public和static。

这是一个好的设计吗? - 取决于它所创建的设计。您的代码将I2接口的可访问性限制为只有那些可以访问I1接口的代码部分。


是的,我知道static是多余的。我也知道它是有效的。我的观点是 - 它好吗?它会在未来引起任何问题吗?它会破坏代码/设计吗? - TheLostMind

0
在Java中,定义一个接口在另一个接口内部是完全有效的。
这是一种编码风格,即接口 I2 存在于 I1 中以供使用(或它们彼此相关)。

1
我的问题是:“在我的特定情况下,将I2保留在I1中是否有优势?”。这是一个好的设计吗?我知道它是有效的。 - TheLostMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接