Java 为什么我们要在类中声明接口?
为什么我们要在Java类中声明接口 例如:Java 为什么我们要在类中声明接口?,java,Java,为什么我们要在Java类中声明接口 例如: public class GenericModelLinker implements IModelLinker { private static final Logger LOG =LoggerFactory.getLogger(GenericModelLinker.class); private String joinAsPropertyField; private boolean joinAsListEntry; private
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);
}
}
公共类GenericModelinker实现IModelLinker{
私有静态最终记录器LOG=LoggerFactory.getLogger(GenericModelLinker.class);
私有字符串joinAsPropertyField;
私有布尔joinAsListEntry;
私有布尔清除列表;
私有列表连接;
//而不是标量属性
私有财产;
公共接口链路{
对象getProperty(IAdaptable n);
void setProperty(IAdaptable n,对象值);
}
}
这是内部接口。Java编程语言允许定义内部类和接口。如果希望通过当前外部类的范围限制此类或接口的可见性,这通常非常有用
有些人使用这种机制来创建一种名称空间。这是对语言功能的滥用(在大多数情况下) 如果接口定义很小,并且接口将仅由其所定义的类的客户端使用,那么这是组织代码的一种好方法。否则,接口应在其自己的文件中定义。如果要在对象中收集一些字段以强调概念,可以创建外部类或内部类(称为嵌套类(静态类)或内部类) 如果您想强调这样一个事实,即这个协作类在原始对象使用之外完全没有意义(没有用处),那么可以将其嵌套/内部 因此,在处理某些层次结构时,可以描述一个“嵌套的”
接口
,该接口将由包装类的子类实现
在JDK中,最重要的例子是Map.Entry
内部接口,在Map
接口中定义,并通过HashMap
、LinkedHashMap
等多种方式实现
当然,
Map.Entry
需要声明为public
,以便在代码所在的任何位置迭代Map时都可以访问。在类中,您可能需要一个接口的多个实现,该接口只与该特定类相关。在这种情况下,将其作为内部接口,而不是公共/包专用接口。只有类内的接口才能声明为私有或受保护。有时,当接口只适合在外部类(或其子类)内部使用时,这是有意义的 以通用且可恢复的方式封装行为 除了
Map
实现类使用的Map.Entry
的好例子之外,另一个好例子是策略模式的实现,其中执行策略在内部进行评估和应用
class Test
{
..
interface Cipher {
doAction();
}
class RAMPCipher implements Cipher{}
class DiskCipher implements Cipher{}
..
}
但是接口是公共的,所以这个目标在这里实现了吗?公共的但是在主类下,所以不是真正的公共的。这些实现无法工作,因为它们需要超级接口而不是类下的接口(我刚刚在一个Spring应用程序中遇到了这个问题)@ChaibiAlaa,您可能对Spring有问题,因为您的内部类/initerface没有声明为public。您特定的问题超出了这个问题的范围,因此,如果您想找到问题的解决方案,欢迎您提出具体问题。具有讽刺意味的是,Map.Entry
实现实际上是由Map
上下文之外的人使用的,用于Java缺少的对
类的功能。讨论。然而,这里有一个很好的答案。