一、Comparable接口
package java.lang; import java.util.*; public interface Comparable<T> { /** * int x = a.compareTo(b) * a > b, x > 0 * a == b, x = 0 * a < b, x < 0 */ public int compareTo(T o); }
该接口主要用于排序
二、Serializable 与 Externalizable 接口
package java.io; /** * 主要用于非transient关键词修饰的属性序列化 */ public interface Serializable { }
Serializable接口的实现类主要配合 SerialVersionUID 属性、 transient关键词使用。
package java.io; import java.io.ObjectOutput; import java.io.ObjectInput; /** * 使用Externalizable完成自定义的序列化工作 */ public interface Externalizable extends java.io.Serializable { void writeExternal(ObjectOutput out) throws IOException; void readExternal(ObjectInput in) throws IOException, ClassNotFoundException; }
Externalizable 的实现类必须有无参构造方法
三、java.util.Iterator 接口
package java.util; import java.util.function.Consumer; public interface Iterator<E> { /** 如果存在下一个元素,则返回true;否则返回false */ boolean hasNext(); /** 返回下一个元素 */ E next(); /** 将迭代器新返回的元素删除。 */ default void remove() { throw new UnsupportedOperationException("remove"); } /** 使用Lambda表达式来遍历集合元素 */ default void forEachRemaining(Consumer<? super E> action) { Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } }
用于实现foreach。
四、Cloneable
package java.lang; public interface Cloneable { }
这个接口表示实现类允许clone(), 实现类必须重写clone()。
五、AutoCloseable
package java.lang; public interface AutoCloseable { /** * 关闭资源 */ void close() throws Exception; }
在引入这个接口之前,对于一些不能被JVM控制的资源,我们需要利用代码进行手动关闭 xxx.close()。这一类代码繁琐枯燥,而且很容易忘记(尤其在多个资源需要关闭时,情况更加复杂)。
try{ Reader r = new BufferedReader(new FileReader(new Path("xxx"))); return r.readLine(); } finally { r.close(); }
当实现了AutoCloseable,程序员可以不考虑关闭这一类流的操作,把注意力放在具体的业务上。
try-finally可以转化为Java7引入的新语法 try-with-resources。
try(Reader r = new BufferedReader(new FileReader(new Path("xxx")))) { return r.readLine(); }