所以我一直在使用以下代码:
HashSet group = new HashSet();
Iterator iter = group.iterator();
现在,有人可以向我解释这实际上如何编译好吗?
我认为你不能在Java中实例化一个接口。所以看作Iterator是一个接口,那么上面的第二行代码如何创建一个对象namned iter(类型为Iterator),工作正常?
谢谢你们
答案 0 :(得分:7)
我以为你无法在Java中实例化一个接口。
你100%正确,你做不到。但是,您可以实例化实现所述接口的类,这正是group.iterator()
方法的作用。
HashSet
类定义了一个实现Iterator
的内部类。此类的对象知道它们迭代的HashSet
对象,并提供Iterator
接口强制要求的方法。这种做法在Java中很常见:它允许您隐藏接口后面的实现,迫使库程序的用户接口。结果变得更易于维护,因为对接口的编程会导致耦合减少。