Java 为什么抽象类Writer中的writeBufferSize被声明为final?

Java 为什么抽象类Writer中的writeBufferSize被声明为final?,java,Java,我只想把writeBufferSize设置为一个更大的数字。为什么设计师宣布它为最终值 回答“为什么”毫无意义:不管是好是坏,它就是这样实施的 注意,在Java8中,这现在是一个静态final变量,更强烈地表明它是一个常量,不可由类的用户更改 改用a。它有一个构造函数,允许您指定缓冲区大小: public abstract class Writer implements Appendable, Closeable, Flushable { /** * Temporary buf

我只想把writeBufferSize设置为一个更大的数字。为什么设计师宣布它为最终值

回答“为什么”毫无意义:不管是好是坏,它就是这样实施的

注意,在Java8中,这现在是一个
静态final
变量,更强烈地表明它是一个常量,不可由类的用户更改

改用a。它有一个构造函数,允许您指定缓冲区大小:

public abstract class Writer implements Appendable, Closeable, Flushable {
    /**
     * Temporary buffer used to hold writes of strings and single characters
     */
    private char[] writeBuffer;
    /**
     * Size of writeBuffer, must be >= 1
     */
    private final int writeBufferSize = 1024;

回答“为什么”毫无意义:不管是好是坏,这就是它的实现方式

注意,在Java8中,这现在是一个
静态final
变量,更强烈地表明它是一个常量,不可由类的用户更改

改用a。它有一个构造函数,允许您指定缓冲区大小:

public abstract class Writer implements Appendable, Closeable, Flushable {
    /**
     * Temporary buffer used to hold writes of strings and single characters
     */
    private char[] writeBuffer;
    /**
     * Size of writeBuffer, must be >= 1
     */
    private final int writeBufferSize = 1024;

只有原始API设计器才能告诉您这一点。毫无疑问

但另一方面,如果它不是一个常数,那么就有可能被设置为一个有害的值,可能是由于意外或误解,或者(对于不可信的代码)故意破坏


但正如@AndyTurner所指出的,这是毫无意义的。。。您可以轻松地构造一个使用不同写入缓冲区大小的
Writer
子类。

只有原始API设计器才能告诉您这一点。毫无疑问

但另一方面,如果它不是一个常数,那么就有可能被设置为一个有害的值,可能是由于意外或误解,或者(对于不可信的代码)故意破坏


但正如@AndyTurner所指出的,这是毫无意义的。。。您可以轻松构造一个使用不同写入缓冲区大小的
Writer
子类。

为什么需要更改它?我认为设置一个更大的数字会写得更快。为什么需要更改它?我认为设置一个更大的数字会写得更快。如果我需要将10个字符串写入磁盘,所有这些字符串的长度都大于writeBufferSize。它将创建新的10个缓冲区实例。“它将创建新的10个缓冲区实例。”不,它只创建一个缓冲区并重用它。@cxco是正确的。查看
Writer.public void write(String str,int off,int len)
(Java 7),如果字符串长度超过内部缓冲区大小,则会创建一个“动态”缓冲区/@DavidSoroko…但如果您使用,则不会创建,这就是我在回答中建议执行的操作。没错,@cxco是正确的wrt
Writer
,您是正确的wrt
BufferedWriter
。如果我需要将10个字符串写入磁盘,所有这些字符串的长度都大于writeBufferSize。它将创建新的10个缓冲区实例。“它将创建新的10个缓冲区实例。”不,它只创建一个缓冲区,并重用它。@cxco是正确的。查看
Writer.public void write(String str,int off,int len)
(Java 7),如果字符串长度超过内部缓冲区大小,则会创建一个“动态”缓冲区/@DavidSoroko…但如果您使用,则不会创建,这就是我在回答中建议执行的操作。没错,@cxco是正确的wrt
Writer
,您是正确的wrt
BufferedWriter