Java源码赏析(二)Java常见接口

一、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();
}

 

posted @ 2020-09-07 18:32  Kwanwooo  阅读(319)  评论(0编辑  收藏  举报