一、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()。
扫描二维码关注公众号,回复:
11724717 查看本文章
五、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();
}