English 中文(简体)
具有公共静态内层接口/舱的优势是什么?
原标题:What s the advantage of having public static inner classes of an interface/class?
  • 时间:2011-03-22 12:01:17
  •  标签:
  • java

我注意到以下代码模式,同时通过我的项目3级图书馆的一些来源浏览:

public interface MyInterface {
    public static class MyClass1 implements MyInterface { ... }
    public static class MyClass2 implements MyInterface { ... }
    public static class MyClass3 implements MyInterface { ... }
}

或者说:

public class MyBaseClass {
    public static class MyClass1 extends MyBaseClass { ... }
    public static class MyClass2 extends MyBaseClass { ... }
    public static class MyClass3 extends MyBaseClass { ... }
}

现实生活实例:

  • SwingX: org.jdesktop.swingx.decorator.HighlightPredicate (Source)
  • Substance: org.pushingpixels.substance.api.renderers.SubstanceDefaultTableCellRenderer (Source)

具有类似守则结构的优势是什么?

我的第一项想法是“乞讨”,但同样的事情也可以使用老式包裹来实现。 因此,在使用公共内部班而不是一揽子计划时,情况如何好?

最佳回答

我认为,这是汇总的原因,也许他们也不值得建立高层职位。 我有时会做这样的事,就是要小一点来制定一揽子计划(将其与他人分开),但相应的班级只应在高层使用。 我认为,这是一项设计决定。

矫正器型号可能是个极好的例子,可以适用于高层,但可能非常简单,不能再成为高层。 你可以很容易地展示主人翁感,把他们作为内部班子。

这从一看就看不出一揽子计划。 直接见到受扶养的班级/课堂。

此外,还有可能进入一个班级的私人领域,这可能是有用的,而且比一揽子私人范围更为细微。

问题回答

我认为,一种用法是向任何人公开提供、但从概念上来说仍与母亲接口相连的界面,提供现成的安装。

只有当接口简单(因为内部执行班级很小),这些接口中太多,而且大多数客户实际上需要这些接口。 否则,他们就把来文方的档案搁置起来,从而更难以理解。

www.un.org/Depts/DGACM/index_spanish.htm 就班级和班级而言, 一种差异是,内部班级可能使用外部班级的私人成员,如果他们是兄弟姐妹,则情况并非如此(不同的高层班)。

例:

public class MyBaseClass {

    private static String staticField = "outer";

    public static class MyClass1 extends MyBaseClass { 

      public MyClass1() {
          MyBaseClass.staticField = "inner1";
      }

    }
}

This won t work if you moved the MyClass out of the outer class.

这样做可以节省一些额外的来源代码文档,使该类别能够给出一个冰层名称,即org.foo.bar.XY.Default,而不是org.foo.bar.DefaultXY

内部接口必须固定,才能进入。 该接口与该类别的实例有关,但与该类别本身有关,因此,与一样。

我认为,公开静态内层是“基地”类的一种额外工具或用途。

在我多年前向我的教师询问这一情况时,他回答说,这样你就能够为同一目标找到一个完全不同的接口。 附录

public class MyBaseClass {
    public static class MyClass1 {
       public int myClassMethod1() {...}
       public int myClassMethod2() {...}
    }
    ...
    public void myBaseMethod1() {...}
    public void myBaseMethod2() {...}
}

由于<代码>MyClass1的事例,你可以查阅<代码>MyBaseClass的内,或作为<代码>MyBaseClass的内涵,即使这两类方法完全不同。

我永远不需要使用,但确实令人感兴趣。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签