我们为什么要在类中声明一个接口?

时间:2013-05-20 11:36:32

标签: java

为什么要在Java中用类声明一个接口?

例如:

public class GenericModelLinker implements IModelLinker {

  private static final Logger LOG =LoggerFactory.getLogger(GenericModelLinker.class);
  private String joinAsPropertyField;
  private boolean joinAsListEntry;
  private boolean clearList;
  private List<Link> joins;

  //instead of a scalar property
  private String uniqueProperty;

  public interface Link {

    Object getProperty(IAdaptable n);

    void setProperty(IAdaptable n, Object value);

  }
}

5 个答案:

答案 0 :(得分:28)

当你想收集一个对象中的一些字段以强调一个概念时,你可以创建一个外部类,或者一个内部(称为嵌套(静态)或内部)。

如果你想强调这个合作类在原始对象使用之外完全没有意义(没有用)的事实,你可以使它嵌套/内部。

因此,在处理某个层次结构时,您可以描述一个“嵌套”interface,它将由包装类的子类实现。

在JDK中,最重要的示例是Map.Entry内部接口,在Map接口中定义,并通过HashMapLinkedHashMap等各种方式实现...

当然,Map.Entry需要声明为public,以便在代码所在的任何地方迭代地图时都可以访问。

答案 1 :(得分:10)

如果接口定义很小并且接口仅由其定义的类的客户端使用,则这是组织代码的好方法。否则,接口应在其自己的文件中定义。

答案 2 :(得分:2)

这是内部接口。 Java编程语言允许定义内部类和接口。如果要根据当前外部类的范围限制此类或接口的可见性,这通常很有用。

有些人使用这种机制来创建一种命名空间。恕我直言,这是滥用语言功能(在大多数情况下)。

答案 3 :(得分:1)

在您的课程中,您可能需要多个接口实现,这仅与此特定类相关。在这种情况下,使它成为一个内部接口,而不是一个公共/包私人的接口 只有类中的接口可以声明为私有或受保护。有时,当接口仅适合在外部类(或其子类)内使用时,这是有道理的。

答案 4 :(得分:1)

以通用和可恢复的方式封装行为。

除了Map.Entry实现类使用的Map的好例子之外,另一个很好的例子是Strategy Pattern的实现,其中执行策略在内部进行评估和应用。

class Test
{

..
interface Cipher {
 doAction();
}
class RAMPCipher implements Cipher{}
class DiskCipher implements Cipher{}
..
}