Appendable 接口 - 用于向字符序列添加字符或字符序列

Appendable 是 Java 中的一个接口,主要用于向字符序列添加字符或字符序列。它提供了一些方法,使得实现类可以接收字符输入,并将这些字符添加到其内部存储中。

Appendable 是 Java 中的一个接口,主要用于向字符序列添加字符或字符序列。它提供了一些方法,使得实现类可以接收字符输入,并将这些字符添加到其内部存储中。该接口是为了处理字符的追加操作而设计的,常用于构建字符串、字符缓冲等场景。

主要方法:

  • Appendable append(char c)  将指定字符 c 追加到 Appendable 对象中。如果发生 IOException,则将其抛出。

  • Appendable append(CharSequence csq)  将指定的字符序列 csq 追加到 Appendable 对象中。如果发生 IOException,则将其抛出。

  • Appendable append(CharSequence csq, int start, int end)  将 csq 的子序列(从 start 开始,到 end - 1 结束)追加到 Appendable 对象中。如果发生 IOException,则将其抛出。

实现类

一些常见的实现了 Appendable 接口的类包括 StringBuilderStringBufferPrintWriter 等。这些类通过实现 Appendable 接口的方法,可以方便地将字符或字符序列添加到自身的内部存储中。

应用示例

示例一:StringBuilder

利用 StringBuilder 实现字符串追加,代码如下:

import java.io.IOException;

public class AppendableExample {
    
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        try {
            // 使用 StringBuilder 实现 Appendable 接口
            Appendable appendable = sb;
            // 追加一个字符
            appendable.append('H');
            // 追加一个字符序列
            appendable.append("ello");
            // 追加一个字符序列的子序列
            appendable.append(", World!", 0, 7);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(sb.toString());
    }
    
}

示例二:自定义 Appendable

简单创建一个实现了 Appendable 接口的类,用来验证接口用法,代码如下:

package com.hxstrive.java_lang;

import java.io.IOException;

/**
 * Appendable 示例
 * @author hxstrive
 */
public class AppendableExample2 {

    public static void main(String[] args) {
        MyAppendable sb = new MyAppendable();
        try {
            // 使用 StringBuilder 实现 Appendable 接口
            Appendable appendable = sb;
            // 追加一个字符
            appendable.append('H');
            // 追加一个字符序列
            appendable.append("ello");
            // 追加一个字符序列的子序列
            appendable.append(", World!", 0, 7);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(sb.toString()); // Hello, World
    }

    static class MyAppendable implements Appendable {
        private static final ThreadLocal<String> local = new ThreadLocal<>();

        public MyAppendable() {
            local.set("");
        }

        @Override
        public Appendable append(CharSequence csq) throws IOException {
            local.set(local.get() + csq);
            return this;
        }

        @Override
        public Appendable append(CharSequence csq, int start, int end) throws IOException {
            local.set(local.get() + csq.subSequence(start, end));
            return this;
        }

        @Override
        public Appendable append(char c) throws IOException {
            local.set(local.get() + c);
            return this;
        }

        @Override
        public String toString() {
            return local.get();
        }
    }

}


学习有两忌,自高和自狭。 —— 书摘
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号