今回はjava.lang以外のパッケージにおけるJava 14から追加されたメソッドを見ていく。
java.io.PrintStreamクラスにvoid write(byte buf[]) メソッドとwriteBytes(byte buf[])メソッドが追加された。
/**
* Writes all bytes from the specified byte array to this stream. If
* automatic flushing is enabled then the {@code flush} method will be
* invoked.
*
* <p> Note that the bytes will be written as given; to write characters
* that will be translated according to the platform's default character
* encoding, use the {@code print(char[])} or {@code println(char[])}
* methods.
*
* @apiNote
* Although declared to throw {@code IOException}, this method never
* actually does so. Instead, like other methods that this class
* overrides, it sets an internal flag which may be tested via the
* {@link #checkError()} method. To write an array of bytes without having
* to write a {@code catch} block for the {@code IOException}, use either
* {@link #writeBytes(byte[] buf) writeBytes(buf)} or
* {@link #write(byte[], int, int) write(buf, 0, buf.length)}.
*
* @implSpec
* This method is equivalent to
* {@link java.io.PrintStream#write(byte[],int,int)
* this.write(buf, 0, buf.length)}.
*
* @param buf A byte array
*
* @throws IOException If an I/O error occurs.
*
* @see #writeBytes(byte[])
* @see #write(byte[],int,int)
*
* @since 14
*/
@Override
public void write(byte buf[]) throws IOException {
this.write(buf, 0, buf.length);
}
/**
* Writes all bytes from the specified byte array to this stream.
* If automatic flushing is enabled then the {@code flush} method
* will be invoked.
*
* <p> Note that the bytes will be written as given; to write characters
* that will be translated according to the platform's default character
* encoding, use the {@code print(char[])} or {@code println(char[])}
* methods.
*
* @implSpec
* This method is equivalent to
* {@link #write(byte[], int, int) this.write(buf, 0, buf.length)}.
*
* @param buf A byte array
*
* @since 14
*/
public void writeBytes(byte buf[]) {
this.write(buf, 0, buf.length);
}
このほかに,java.text.CompactNumberFormatクラスに,ユニコードコンソーシアムが定めた複数形を表現する仕様(https://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules)に対応するためのメソッドが追加されている。これはドイツ語やフランス語での使用を想定しているようなので,日本語環境では利用することはなさそうだ。
/**
* The {@code pluralRules} used in this compact number format.
* {@code pluralRules} is a String designating plural rules which associate
* the {@code Count} keyword, such as "{@code one}", and the
* actual integer number. Its syntax is defined in Unicode Consortium's
* <a href = "http://unicode.org/reports/tr35/tr35-numbers.html#Plural_rules_syntax">
* Plural rules syntax</a>.
* The default value is an empty string, meaning there is no plural rules.
*
* @serial
* @since 14
*/
private String pluralRules = "";
/**
* Creates a {@code CompactNumberFormat} using the given decimal pattern,
* decimal format symbols, compact patterns, and plural rules.
* To obtain the instance of {@code CompactNumberFormat} with the standard
* compact patterns for a {@code Locale}, {@code Style}, and {@code pluralRules},
* it is recommended to use the factory methods given by
* {@code NumberFormat} for compact number formatting. For example,
* {@link NumberFormat#getCompactNumberInstance(Locale, Style)}.
*
* @param decimalPattern a decimal pattern for general number formatting
* @param symbols the set of symbols to be used
* @param compactPatterns an array of
* <a href = "CompactNumberFormat.html#compact_number_patterns">
* compact number patterns</a>
* @param pluralRules a String designating plural rules which associate
* the {@code Count} keyword, such as "{@code one}", and the
* actual integer number. Its syntax is defined in Unicode Consortium's
* <a href = "http://unicode.org/reports/tr35/tr35-numbers.html#Plural_rules_syntax">
* Plural rules syntax</a>
* @throws NullPointerException if any of the given arguments is
* {@code null}
* @throws IllegalArgumentException if the given {@code decimalPattern},
* the {@code compactPatterns} array contains an invalid pattern,
* a {@code null} appears in the array of compact patterns,
* or if the given {@code pluralRules} contains an invalid syntax
* @see DecimalFormat#DecimalFormat(java.lang.String, DecimalFormatSymbols)
* @see DecimalFormatSymbols
* @since 14
*/
public CompactNumberFormat(String decimalPattern,
DecimalFormatSymbols symbols, String[] compactPatterns,
String pluralRules) {
Objects.requireNonNull(decimalPattern, "decimalPattern");
Objects.requireNonNull(symbols, "symbols");
Objects.requireNonNull(compactPatterns, "compactPatterns");
Objects.requireNonNull(pluralRules, "pluralRules");
this.symbols = symbols;
// Instantiating the DecimalFormat with "0" pattern; this acts just as a
// basic pattern; the properties (For example, prefix/suffix)
// are later computed based on the compact number formatting process.
decimalFormat = new DecimalFormat(SPECIAL_PATTERN, this.symbols);
// Initializing the super class state with the decimalFormat values
// to represent this CompactNumberFormat.
// For setting the digits counts, use overridden setXXX methods of this
// CompactNumberFormat, as it performs check with the max range allowed
// for compact number formatting
setMaximumIntegerDigits(decimalFormat.getMaximumIntegerDigits());
setMinimumIntegerDigits(decimalFormat.getMinimumIntegerDigits());
setMaximumFractionDigits(decimalFormat.getMaximumFractionDigits());
setMinimumFractionDigits(decimalFormat.getMinimumFractionDigits());
super.setGroupingUsed(decimalFormat.isGroupingUsed());
super.setParseIntegerOnly(decimalFormat.isParseIntegerOnly());
this.compactPatterns = compactPatterns;
// DecimalFormat used for formatting numbers with special pattern "0".
// Formatting is delegated to the DecimalFormat's number formatting
// with no fraction digits
this.decimalPattern = decimalPattern;
defaultDecimalFormat = new DecimalFormat(this.decimalPattern,
this.symbols);
defaultDecimalFormat.setMaximumFractionDigits(0);
this.pluralRules = pluralRules;
// Process compact patterns to extract the prefixes, suffixes and
// divisors
processCompactPatterns();
}