zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    [CF750D] New Year and Fireworks(暴力,规律,dfs)
    [HDOJ6034] Balala Power!(模拟,贪心,大数)
    [HIHO1560] H国的身份证号码II(dp,计数,矩阵快速幂)
    [HIHO1555] 四次方根(递推,容斥,矩阵快速幂)
    [HIHO1554] 最短的 Nore0061(DP)
    [CF831D] Office Keys(二分,贪心)
    [HDOJ6156] Palindrome Function(数位dp, 枚举)
    团体程序设计天梯赛-练习集-L1-029. 是不是太胖了
    团体程序设计天梯赛-练习集-L1-028. 判断素数
    团体程序设计天梯赛-练习集-L1-027. 出租
  • 原文地址:https://www.cnblogs.com/kwanwoo/p/13628386.html
Copyright © 2011-2022 走看看