优惠码 第55页 Spliterators.AbstractDoubleSpliterator java.lang.Object |—java.util.Spliterators.AbstractDoubleSpliterator public abstract static class Spliterators.AbstractDoubleSpliterator extends Object implements Spliterator.OfDouble 一个抽象的 Spliterator.OfDouble ,它实现了 trySplit 以允许有限的并行性。 要实现拆分器,扩展类只需要实现 Spliterator.OfDouble.tryAdvance(java.util.function.DoubleConsumer) tryAdvance}。 如果扩展类可以提供更高性能的实现,则应覆盖 Spliterator.OfDouble.forEachRemaining(java.util.function.DoubleConsumer) forEach}。 嵌套类摘要 从接口 java.util.Spliterator 继承的嵌套类/接口 Spliterator.OfDouble, Spliterator.OfInt, Spliterator.OfLong, Spliterator.OfPrimitive<T,T_CONS,T_SPLITR extends Spliterator.OfPrimitiveT,T_CONS,T_SPLITR> 字段摘要 从接口 java.util.Spliterator 继承的字段 CONCURRENT, DISTINCT, IMMUTABLE, NONNULL, ORDERED, SIZED, SORTED, SUBSIZED 构造函数摘要 修饰符 构造函数 描述 protected AbstractDoubleSpliterator(long est, int additionalCharacteristics) 创建一个报告给定估计大小和特征的拆分器。 方法总结 修饰符和类型 方法 描述 int characteristics() 返回此 Spliterator 及其元素的一组特征。 long estimateSize() 返回 Spliterator.forEachRemaining(java.util.function.Consumer) 遍历将遇到的元素数量的估计值,如果无限、未知或计算过于昂贵,则返回 Long#MAX_VALUE。 Spliterator.OfDouble trySplit() 如果此 spliterator 可以分区,则返回一个 Spliterator 覆盖元素,从该方法返回时,该 Spliterator 不会被此 Spliterator 覆盖。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 从接口 java.util.Spliterator 继承的方法 getComparator, getExactSizeIfKnown, hasCharacteristics 从接口 java.util.Spliterator.OfDouble 继承的方法 forEachRemaining, forEachRemaining, tryAdvance, tryAdvance 构造函数详细信息 AbstractDoubleSpliterator protected AbstractDoubleSpliterator(long est, int additionalCharacteristics) 创建一个报告给定估计大小和特征的拆分器。 参数: 参数名称 参数描述 est 此拆分器的估计大小(如果已知),否则为 Long.MAX_VALUE。 additionalCharacteristics 此拆分器的源或元素的属性。 如果报告了 SIZED,则此拆分器将另外报告 SUBSIZED。 方法详情 trySplit public Spliterator.OfDouble trySplit() 如果此 spliterator 可以分区,则返回一个 Spliterator 覆盖元素,从该方法返回时,该 Spliterator 不会被此 Spliterator 覆盖。 如果此 Spliterator 是 Spliterator.ORDERED,则返回的 Spliterator 必须涵盖元素的严格前缀。 除非此 Spliterator 涵盖无限数量的元素,否则对 trySplit() 的重复调用最终必须返回 null。 在非空返回时: 拆分前为estimateSize() 报告的值,拆分后必须大于或等于为此和返回的Spliterator 的estimateSize(); 和 如果此 Spliterator 是 SUBSIZED,则拆分前此 spliterator 的estimateSize() 必须等于此 spliterator 的estimateSize()...
2024-04-03
Spliterators java.lang.Object |—java.util.Spliterators public final class Spliterators extends Object 用于操作或创建 Spliterator 及其原始特化 Spliterator.OfInt、Spliterator.OfLong 和 Spliterator.OfDouble 实例的静态类和方法。 嵌套类摘要 修饰符和类型 类 描述 static class Spliterators.AbstractDoubleSpliterator 一个抽象的 Spliterator.OfDouble ,它实现了 trySplit 以允许有限的并行性。 static class Spliterators.AbstractIntSpliterator 一个抽象的 Spliterator.OfInt ,它实现了 trySplit 以允许有限的并行性。 static class Spliterators.AbstractLongSpliterator 实现 trySplit 以允许有限并行性的抽象 Spliterator.OfLong。 static class Spliterators.AbstractSpliteratorT 实现 trySplit 以允许有限并行的抽象 Spliterator。 方法总结 修饰符和类型 方法 描述 static Spliterator.OfDouble emptyDoubleSpliterator() 创建一个空的 Spliterator.OfDouble static Spliterator.OfInt emptyIntSpliterator() 创建一个空的 Spliterator.OfInt static Spliterator.OfLong emptyLongSpliterator() 创建一个空的 Spliterator.OfLong static <T> Spliterator<T> emptySpliterator() 创建一个空的 Spliterator static PrimitiveIterator.OfDouble iterator(Spliterator.OfDouble spliterator) 从 Spliterator.OfDouble 创建 PrimitiveIterator.OfDouble。 static PrimitiveIterator.OfInt iterator(Spliterator.OfInt spliterator) 从 Spliterator.OfInt 创建 PrimitiveIterator.OfInt。 static PrimitiveIterator.OfLong iterator(Spliterator.OfLong spliterator) 从 Spliterator.OfLong 创建 PrimitiveIterator.OfLong。 static <T> Iterator<T> iterator(Spliterator<? extends T> spliterator) 从 Spliterator 创建一个 Iterator。 static Spliterator.OfDouble spliterator(double[] array, int additionalCharacteristics) 创建一个 Spliterator.OfDouble 覆盖给定数组的元素,使用一组自定义的拆分器特征。 static Spliterator.OfDouble spliterator(double[] array, int fromIndex, int toIndex, int additionalCharacteristics) 创建一个 Spliterator.OfDouble 覆盖给定数组的一系列元素,使用一组自定义的拆分器特征。 static Spliterator.OfInt spliterator(int[] array, int additionalCharacteristics) 创建一个 Spliterator.OfInt 覆盖给定数组的元素,使用一组自定义的拆分器特征。 static Spliterator.OfInt spliterator(int[] array, int fromIndex, int toIndex, int additionalCharacteristics) 创建一个 Spliterator.OfInt 覆盖给定数组的一系列元素,使用一组自定义的拆分器特征。 static Spliterator.OfLong spliterator(long[] array, int additionalCharacteristics) 创建一个 Spliterator.OfLong 覆盖给定数组的元素,使用一组自定义的拆分器特征。 static Spliterator.OfLong spliterator(long[] array, int fromIndex, int toIndex, int additionalCharacteristics) 创建一个 Spliterator.OfLong 覆盖给定数组的一系列元素,使用一组自定义的拆分器特征。 static <T> Spliterator<T> spliterator(Object[] array, int additionalCharacteristics) 使用一组自定义的拆分器特征创建一个覆盖给定数组元素的拆分器。 static <T> Spliterator<T> spliterator(Object[] array, int fromIndex, int toIndex, int additionalCharacteristics) 使用一组自定义的拆分器特征创建一个涵盖给定数组的一系列元素的拆分器。 static <T> Spliterator<T> spliterator(Collection<? extends T> c, int characteristics) 使用给定集合的 Collection.iterator() 作为元素源创建 Spliterator,并将其 Collection.size() 报告为其初始大小。 static <T> Spliterator<T> spliterator(Iterator<? extends T> iterator, long size, int characteristics) 使用给定的迭代器作为元素的源创建一个拆分器,并具有给定的初始报告大小。 static Spliterator.OfDouble spliterator(PrimitiveIterator.OfDouble iterator, long size, int characteristics) 使用给定的 DoubleStream.DoubleIterator 作为元素的源创建一个 Spliterator.OfDouble,并具有给定的初始报告大小。 static Spliterator.OfInt spliterator(PrimitiveIterator.OfInt iterator, long size, int characteristics) 使用给定的 IntStream.IntIterator 作为元素的源创建一个 Spliterator.OfInt,并具有给定的初始报告大小。 static Spliterator.OfLong spliterator(PrimitiveIterator.OfLong iterator, long size, int characteristics) 创建一个 Spliterator.OfLong 使用给定的 LongStream.LongIterator 作为元素的源,并具有给定的初始报告大小。 static <T> Spliterator<T> spliteratorUnknownSize(Iterator<? extends T> iterator, int characteristics) 使用给定的迭代器作为元素的源创建一个拆分器,没有初始大小估计。 static Spliterator.OfDouble spliteratorUnknownSize(PrimitiveIterator.OfDouble iterator, int characteristics) 使用给定的 DoubleStream.DoubleIterator 作为元素源创建一个 Spliterator.OfDouble,没有初始大小估计。 static Spliterator.OfInt spliteratorUnknownSize(PrimitiveIterator.OfInt iterator, int characteristics) 使用给定的 IntStream.IntIterator 作为元素源创建 Spliterator.OfInt,没有初始大小估计。 static Spliterator.OfLong spliteratorUnknownSize(PrimitiveIterator.OfLong iterator, int characteristics) 使用给定的 LongStream.LongIterator 作为元素源创建 Spliterator.OfLong,没有初始大小估计。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 方法详情 emptySpliterator public static <T>...
2024-04-03
OptionalLong java.lang.Object |—java.util.OptionalLong public final class OptionalLong extends Object 一个容器对象,可能包含也可能不包含 long 值。 如果存在值,isPresent() 将返回 true,而 getAsLong() 将返回该值。 提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果值不存在则返回默认值)和 ifPresent() (如果值存在则执行代码块)。 这是一个基于值的类; 在 OptionalLong 的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预知的结果,应该避免。 方法总结 修饰符和类型 方法 描述 static OptionalLong empty() 返回一个空的 OptionalLong 实例。 boolean equals(Object obj) 指示某个其他对象是否“等于”此 OptionalLong。 long getAsLong() 如果此 OptionalLong 中存在值,则返回该值,否则抛出 NoSuchElementException。 int hashCode() 返回当前值的哈希码值(如果有);如果不存在值,则返回 0(零)。 void ifPresent(LongConsumer consumer) 如果存在值,则让指定的使用者接受该值,否则什么也不做。 boolean isPresent() 如果存在值,则返回 true,否则返回 false。 static OptionalLong of(long value) 返回具有指定值的 OptionalLong。 long orElse(long other) 如果存在则返回值,否则返回其他值。 long orElseGet(LongSupplier other) 如果存在则返回该值,否则调用其他值并返回该调用的结果。 <X extends Throwable>long orElseThrow(Supplier<X> exceptionSupplier) 如果存在,则返回包含的值,否则抛出由提供的供应商创建的异常。 String toString() 返回对象的字符串表示形式。 从类 java.lang.Object 继承的方法 clone, finalize, getClass, notify, notifyAll, wait, wait, wait 方法详情 empty public static OptionalLong empty() 返回一个空的 OptionalLong 实例。 此 OptionalLong 没有值。 返回: 一个空的 OptionalLong。 of public static OptionalLong of(long value) 返回具有指定值的 OptionalLong。 参数: 参数名称 参数描述 value 存在的值 返回: 具有当前值的 OptionalLong getAsLong public long getAsLong() 如果此 OptionalLong 中存在值,则返回该值,否则抛出 NoSuchElementException。 返回: 此 OptionalLong 持有的值 Throws: Throw名称 Throw描述 NoSuchElementException 如果不存在值 isPresent public boolean isPresent()...
2024-04-03
OptionalInt java.lang.Object |—java.util.OptionalInt public final class OptionalInt extends Object 一个容器对象,可能包含也可能不包含 int 值。 如果存在值,isPresent() 将返回 true,而 getAsInt() 将返回该值。 提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果值不存在则返回默认值)和 ifPresent() (如果值存在则执行代码块)。 这是一个基于值的类; 在 OptionalInt 的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预知的结果,应该避免。 方法总结 修饰符和类型 方法 描述 static OptionalInt empty() 返回一个空的 OptionalInt 实例。 boolean equals(Object obj) 指示某个其他对象是否“等于”此 OptionalInt。 int getAsInt() 如果此 OptionalInt 中存在值,则返回该值,否则抛出 NoSuchElementException。 int hashCode() 返回当前值的哈希码值(如果有);如果不存在值,则返回 0(零)。 void ifPresent(IntConsumer consumer) 如果存在值,则让指定的使用者接受该值,否则什么也不做。 boolean isPresent() 如果存在值,则返回 true,否则返回 false。 static OptionalInt of(int value) 返回具有指定值的 OptionalInt。 int orElse(int other) 如果存在则返回值,否则返回其他值。 int orElseGet(IntSupplier other) 如果存在则返回该值,否则调用其他值并返回该调用的结果。 <X extends Throwable>int orElseThrow(Supplier<X> exceptionSupplier) 如果存在,则返回包含的值,否则抛出由提供的供应商创建的异常。 String toString() 返回对象的字符串表示形式。 从类 java.lang.Object 继承的方法 clone, finalize, getClass, notify, notifyAll, wait, wait, wait 方法详情 empty public static OptionalInt empty() 返回一个空的 OptionalInt 实例。 此 OptionalInt 没有值。 返回: 一个空的 OptionalInt of public static OptionalInt of(int value) 返回具有指定值的 OptionalInt。 参数: 参数名称 参数描述 value 存在的值 返回: 存在值的 OptionalInt getAsInt public int getAsInt() 如果此 OptionalInt 中存在值,则返回该值,否则抛出 NoSuchElementException。 返回: 此 OptionalInt 持有的值 Throws: Throw名称 Throw描述 NoSuchElementException 如果不存在值 isPresent public boolean isPresent()...
2024-04-03
OptionalDouble java.lang.Object |—java.util.OptionalDouble public final class OptionalDouble extends Object 一个容器对象,可能包含也可能不包含双精度值。 如果存在值,isPresent() 将返回 true,而 getAsDouble() 将返回该值。 提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果值不存在则返回默认值)和 ifPresent() (如果值存在则执行代码块)。 这是一个基于值的类; 在 OptionalDouble 的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预测的结果,应该避免。 方法总结 修饰符和类型 方法 描述 static OptionalDouble empty() 返回一个空的 OptionalDouble 实例。 boolean equals(Object obj) 指示某个其他对象是否“等于”此 OptionalDouble。 double getAsDouble() 如果此 OptionalDouble 中存在值,则返回该值,否则抛出 NoSuchElementException。 int hashCode() 返回当前值的哈希码值(如果有);如果不存在值,则返回 0(零)。 void ifPresent(DoubleConsumer consumer) 如果存在值,则让指定的使用者接受该值,否则什么也不做。 boolean isPresent() 如果存在值,则返回 true,否则返回 false。 static OptionalDouble of(double value) 返回具有指定值的 OptionalDouble。 double orElse(double other) 如果存在则返回值,否则返回其他值。 double orElseGet(DoubleSupplier other) 如果存在则返回该值,否则调用其他值并返回该调用的结果。 <X extends Throwable>double orElseThrow(Supplier<X> exceptionSupplier) 如果存在,则返回包含的值,否则抛出由提供的供应商创建的异常。 String toString() 返回对象的字符串表示形式。 从类 java.lang.Object 继承的方法 clone, finalize, getClass, notify, notifyAll, wait, wait, wait 方法详情 empty public static OptionalDouble empty() 返回一个空的 OptionalDouble 实例。 此 OptionalDouble 不存在任何值。 返回: 一个空的 OptionalDouble。 of public static OptionalDouble of(double value) 返回具有指定值的 OptionalDouble。 参数: 参数名称 参数描述 value 存在的值 返回: 具有当前值的 OptionalDouble getAsDouble public double getAsDouble() 如果此 OptionalDouble 中存在值,则返回该值,否则抛出 NoSuchElementException。 返回: 此 OptionalDouble 持有的值 Throws: Throw名称 Throw描述 NoSuchElementException 如果不存在值 isPresent public boolean isPresent() 如果存在值,则返回 true,否则返回...
2024-04-03
Optional java.lang.Object |—java.util.Optional<T& public final class Optional<T> extends Object 一个容器对象,可能包含也可能不包含非空值。 如果存在值,isPresent() 将返回 true,而 get() 将返回该值。 提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果值不存在则返回默认值)和 ifPresent() (如果值存在则执行代码块)。 这是一个基于值的类; 在 Optional 的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预知的结果,应该避免。 方法总结 修饰符和类型 方法 描述 static <T> Optional<T> empty() 返回一个空的可选实例。 boolean equals(Object obj) 指示某个其他对象是否“equal”此 Optional。 OptionalT filter(Predicate<? super T> predicate) 如果存在一个值,并且该值与给定的谓词匹配,则返回一个描述该值的 Optional,否则返回一个空的 Optional。 <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) 如果存在值,则将提供的 Optional-bearing 映射函数应用于它,返回该结果,否则返回空 Optional。 T get() 如果此 Optional 中存在值,则返回该值,否则抛出 NoSuchElementException。 int hashCode() 返回当前值的哈希码值(如果有);如果不存在值,则返回 0(zero)。 void ifPresent(Consumer<? super T> consumer) 如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。 boolean isPresent() 如果存在值,则返回 true,否则返回 false。 <U> Optional<U> map(Function<? super T,? extends U> mapper) 如果存在值,则对其应用提供的映射函数,如果结果为非 null,则返回描述结果的 Optional。 static <T> Optional<T> of(T value) 返回具有指定当前非空值的 Optional。 static <T> Optional<T> ofNullable(T value) 返回一个描述指定值的 Optional,如果非 null,否则返回一个空 Optional。 T orElse(T other) 如果存在则返回值,否则返回其他值。 T orElseGet(Supplier<? extends T> other) 如果存在则返回该值,否则调用其他值并返回该调用的结果。 <X extends Throwable>T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在,则返回包含的值,否则抛出由提供的供应商创建的异常。 String toString() 返回此 Optional 适合调试的非空字符串表示形式。 从类 java.lang.Object 继承的方法 clone, finalize, getClass, notify, notifyAll, wait, wait, wait 方法详情 empty public static <T> Optional<T> empty() 返回一个空的可选实例。 此 Optional 没有值。 类型参数: 类型参数名称 类型参数描述 T 不存在值的类型 返回: 一个空的 Optional of public static <T> Optional<T> of(T value) 返回具有指定当前非空值的 Optional。 类型参数: 类型参数名称 类型参数描述 T 值的类别 参数: 参数名称 参数描述 value 要存在的值,它必须是非空的 返回: 一个含有该值的 Optional Throws:...
2024-04-03
SimpleTimeZone java.lang.Object |—java.util.TimeZone |—|—java.util.SimpleTimeZone public class SimpleTimeZone extends TimeZone SimpleTimeZone 是 TimeZone 的具体子类,表示用于公历的时区。 该类保存与 GMT 的偏移量,称为原始偏移量,以及夏令时时间表的开始和结束规则。 由于它只为每个值保存单个值,因此它无法处理与 GMT 和夏令时计划的偏移量的历史变化,除了 setStartYear 方法可以指定夏令时计划开始生效的年份。 要构建具有夏令时时间表的 SimpleTimeZone,可以使用一组规则来描述时间表,即开始规则和结束规则。 夏令时开始或结束的日期由月份、月份和星期几值的组合指定。 月份值由 Calendar Calendar#MONTH 字段值表示,例如 Calendar#MARCH。 星期几值由 Calendar Calendar#DAY_OF_WEEK 值表示,例如 Calendar#SUNDAY。 值组合的含义如下。 准确的月份日期 要指定准确的月份日期,请将月份和月份日期设置为准确值,并将星期几设置为零。 例如,要指定 3 月 1 日,请将月份设置为 Calendar#MARCH,将 day-of-month 设置为 1,将 day-of-week 设置为 0。 星期几在一个月的某一天或之后要指定星期几在一个月的某一天或之后,请将月份设置为精确的月份值,将月份设置为应用规则的当天或之后的日期, 和星期几到一个负的 Calendar#DAY_OF_WEEK 字段值。 例如,要指定四月的第二个星期日,请将月份设置为 Calendar#APRIL,将日期设置为 8,将星期几设置为 -Calendar#SUNDAY。 星期几在一个月的某一天或之前 要指定一周中的某一天在一个月的某一天或之前,请将 day-of-month 和 day-of-week 设置为负值。 例如,要指定 3 月 21 日或之前的最后一个星期三,请将月份设置为 Calendar#MARCH,日期为 -21,星期几为 -Calendar#WEDNESDAY。 一个月的最后一周要指定一个月的最后一周,请将 day-of-week 设置为 Calendar#DAY_OF_WEEK 值,并将 day-of-month 设置为 -1。 例如,要指定 10 月的最后一个星期日,请将月份设置为 Calendar#OCTOBER,将星期几设置为 Calendar#SUNDAY,并将日期设置为 -1。 夏令时开始或结束的时间由一天中的毫秒值指定。 有三种指定时间的模式:WALL_TIME、STANDARD_TIME 和 UTC_TIME。 例如,如果夏令时在挂钟时间的凌晨 2:00 结束,则可以在 WALL_TIME 模式下指定为 7200000 毫秒。 在这种情况下,结束规则的挂钟时间与白天时间的含义相同。 以下是构造时区对象的参数示例。 // Base GMT offset: -8:00 // DST starts: at 2:00am in standard time // on the first Sunday in April // DST...
2024-04-03
ServiceLoader java.lang.Object |—java.util.ServiceLoader<S& public final class ServiceLoader<S> extends Object implements Iterable<S> 一个简单的服务提供者加载工具。 服务是一组众所周知的接口和(通常是抽象的)类。 服务提供者是服务的具体实现。 提供者中的类通常实现服务本身中定义的类的接口和子类。 服务提供者可以以扩展的形式安装在 Java 平台的实现中,即将 jar 文件放置在任何常用的扩展目录中。 还可以通过将提供程序添加到应用程序的类路径或通过某些其他特定于平台的方式来使提供程序可用。 出于加载的目的,服务由单一类型表示,即单一接口或抽象类。 (可以使用具体类,但不建议这样做。)给定服务的提供者包含一个或多个具体类,这些具体类使用提供者特定的数据和代码扩展此服务类型。 提供者类通常不是整个提供者本身,而是一个代理,它包含足够的信息来决定提供者是否能够满足特定请求以及可以按需创建实际提供者的代码。 提供者类的细节往往是高度特定于服务的; 没有一个类或接口可以统一它们,所以这里没有定义这样的类型。 此工具强制执行的唯一要求是提供程序类必须具有零参数构造函数,以便它们可以在加载期间被实例化。 通过在资源目录 META-INF/services 中放置提供者配置文件来识别服务提供者。 该文件的名称是服务类型的完全限定二进制名称。 该文件包含具体提供程序类的完全限定二进制名称列表,每行一个。 每个名称周围的空格和制表符以及空白行将被忽略。 注释字符为’#’(’\u0023′, NUMBER SIGN); 在每一行中,第一个注释字符之后的所有字符都将被忽略。 该文件必须以 UTF-8 编码。 如果一个特定的具体提供者类在多个配置文件中被命名,或者在同一个配置文件中被命名不止一次,那么重复的将被忽略。 命名特定提供者的配置文件不必与提供者本身位于相同的 jar 文件或其他分发单元中。 必须可以从最初查询配置文件的同一个类加载器访问提供程序; 请注意,这不一定是实际加载文件的类加载器。 提供者的定位和实例化是惰性的,即按需。 服务加载器维护到目前为止已加载的提供程序的缓存。 迭代器方法的每次调用都会返回一个迭代器,它首先按实例化顺序产生缓存的所有元素,然后延迟定位并实例化任何剩余的提供者,依次将每个提供者添加到缓存中。 可以通过 reload 方法清除缓存。 服务加载程序总是在调用者的安全上下文中执行。 受信任的系统代码通常应该从特权安全上下文中调用此类中的方法以及它们返回的迭代器的方法。 此类的实例对于多个并发线程的使用是不安全的。 除非另有说明,否则将 null 参数传递给此类中的任何方法都将导致抛出 NullPointerException。 示例 假设我们有一个服务类型 com.example.CodecSet,它旨在表示某些协议的编码器/解码器对集合。 在这种情况下,它是一个具有两个抽象方法的抽象类: public abstract Encoder getEncoder(String encodingName); public abstract Decoder getDecoder(String encodingName); 如果提供者不支持给定的编码,每个方法都会返回一个适当的对象或 null。 典型的供应商支持不止一种编码。 如果 com.example.impl.StandardCodecs 是 CodecSet 服务的实现,那么它的 jar 文件还包含一个名为 META-INF/services/com.example.CodecSet 该文件包含一行: com.example.impl.StandardCodecs # Standard codecs CodecSet 类在初始化时创建并保存单个服务实例: private static ServiceLoader<CodecSet> codecSetLoader = ServiceLoader.load(CodecSet.class); 为了找到给定编码名称的编码器,它定义了一个静态工厂方法,该方法遍历已知和可用的提供程序,仅在找到合适的编码器或用完提供程序时返回。 public static Encoder getEncoder(String encodingName) { for (CodecSet cp : codecSetLoader) { Encoder enc = cp.getEncoder(encodingName); if (enc != null) return enc;...
2024-04-03
Scanner java.lang.Object |—java.util.Scanner public final class Scanner extends Object implements Iterator<String>, Closeable 一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。 然后可以使用各种 next 方法将生成的标记转换为不同类型的值。 例如,此代码允许用户从 System.in 中读取一个数字: Scanner sc = new Scanner(System.in); int i = sc.nextInt(); 作为另一个示例,此代码允许从文件 myNumbers 中的条目分配长类型: Scanner sc = new Scanner(new File("myNumbers")); while (sc.hasNextLong()) { long aLong = sc.nextLong(); } 扫描仪还可以使用除空格以外的分隔符。 此示例从字符串中读取多个项目: String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close(); 打印以下输出: 1 2 red blue 使用此代码可以生成相同的输出,该代码使用正则表达式一次解析所有四个标记: String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input); s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)"); MatchResult result = s.match(); for (int i=1; i<=result.groupCount(); i++) System.out.println(result.group(i)); s.close(); 扫描仪使用的默认空白分隔符由 Character.isWhitespace 识别。 reset() 方法会将扫描仪的分隔符的值重置为默认的空白分隔符,无论它之前是否已更改。 扫描操作可能会阻塞等待输入。 next() 和 hasNext() 方法及其原始类型的伴随方法(例如...
2024-04-03
ResourceBundle java.lang.Object |—java.util.ResourceBundle public abstract class ResourceBundle extends Object 资源包包含特定于语言环境的对象。 当您的程序需要特定于语言环境的资源(例如字符串)时,您的程序可以从适合当前用户语言环境的资源包中加载它。 通过这种方式,您可以编写在很大程度上独立于用户语言环境的程序代码,从而将资源包中的大多数(如果不是全部)特定于语言环境的信息隔离开来。 这使您可以编写能够: 易于本地化或翻译成不同的语言 一次处理多个语言环境 稍后可以轻松修改以支持更多语言环境 资源包属于其成员共享一个通用基本名称的系列,但其名称还具有标识其语言环境的附加组件。 例如,资源包系列的基本名称可能是“MyResources”。 该系列应该有一个默认资源包,它与它的系列具有相同的名称 – “MyResources” – 如果不支持特定的语言环境,它将被用作最后的资源包。 然后,该家族可以根据需要提供尽可能多的特定于语言环境的成员,例如名为“MyResources_de”的德国成员。 一个系列中的每个资源包都包含相同的项目,但这些项目已针对该资源包所代表的语言环境进行了翻译。 例如,“MyResources”和“MyResources_de”都可能有一个用于取消操作的按钮的字符串。 在“MyResources”中,字符串可能包含“Cancel”,而在“MyResources_de”中,它可能包含“Abbrechen”。 如果不同国家有不同的资源,您可以进行专门化:例如,“MyResources_de_CH”包含瑞士 (CH) 的德语 (de) 对象。 如果您只想修改专精中的部分资源,您可以这样做。 当您的程序需要特定于语言环境的对象时,它会使用 getBundle 方法加载 ResourceBundle 类: ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale); 资源包包含键/值对。 这些键唯一地标识包中特定于语言环境的对象。 下面是一个包含两个键/值对的 ListResourceBundle 示例: public class MyResources extends ListResourceBundle { protected Object[][] getContents() { return new Object[][] { // LOCALIZE THE SECOND STRING OF EACH ARRAY (e.g., "OK") {"OkKey", "OK"}, {"CancelKey", "Cancel"}, // END OF MATERIAL TO LOCALIZE }; } } 键始终是字符串。 在本例中,键是“OkKey”和“CancelKey”。 在上面的例子中,值也是字符串——“OK”和“Cancel”——但它们不是必须的。 这些值可以是任何类型的对象。 您可以使用适当的 getter 方法从资源包中检索对象。 因为 “OkKey” 和 “CancelKey” 都是字符串,所以您可以使用 getString 来检索它们: button1 = new Button(myResources.getString("OkKey")); button2 = new Button(myResources.getString("CancelKey")); getter 方法都需要键作为参数,如果找到则返回对象。 如果找不到对象,getter 方法会抛出 MissingResourceException。 除了 getString,ResourceBundle 还提供了获取字符串数组的方法 getStringArray,以及用于任何其他类型对象的通用 getObject 方法。 使用 getObject...
2024-04-03