Skip to content

选项 ^0.0.2

概述

Chance提供选项配置用于控制调用时候的一些行为。选项Opt是一个函数式接口,定义如下:

java
public interface Opt {

    default boolean support(int opts) {
        return (opts & value()) != 0;
    }

    int value();
}

实现Opt接口只需要实现value()方法,返回一个整型的值。目前约定最多可以存在32个选项,其中值范围在[1 << 0, 1 << 15]定义为Chance内置的选项,值范围在[1 << 16, 1 << 31]预留给使用者自定义扩展。当然,这里只是约定上的设计,没有做严格的判断或者限制,理论上可以使用任意的整型值作为选项的返回值。

使用详解

可以通过Chance.Builder中的enableOpt(s)disableOpt(s)启用或者禁用选项。可以通过系统变量CHANCE_OPTS来定义全局的选项,使用系统变量变量的优先级会比在Chance.Builder中定义高。例如:

java
// global options
System.setProperty("CHANCE_OPTS", String.valueOf(Opt.InternalOpt.getAllInternalOpts()));
Chance<String> chance = Chance.<String, Throwable>newBuilder().withNeverRetry().build();

// enableOpt or disableOpt
Chance<String> chance = Chance.<String, Throwable>newBuilder()
        .enableOpts(Opt.InternalOpt.values())
        .disableOpt(Opt.InternalOpt.RECORDING_SYSTEM_TIME)
        .withNeverRetry()
        .build();

内置选项

内置选项见枚举Opt.InternalOpt,整理成表格如下:

选项引入版本功能描述
RECORDING_SYSTEM_TIME^0.0.2是否允许调用过程中通过System.nanoTime()记录系统时间
FOREVER_CHOICE^0.0.2是否允许使用ForeverChoice
LISTENERS^0.0.2是否允许使用监听器
CANCELLING_CHANCE^0.0.2是否允许主动取消当前Chance调用
EXCEPTION_TYPE_EQUALITY_COMPARISON^0.0.2是否允许使用equals()判断可重试异常类型,禁用此选项会使用isAssignableFrom()进行判断
RECOVERY^0.0.2是否允许恢复

WARNING

默认所有的内置选项都启用。如果RECORDING_SYSTEM_TIME选项被禁用,那么MaxCallingTimeLimitChoice也会同时被禁用。

自定义选项

实现自定义选项:

java
public class CustomOpt implements Opt {

    @Override
    public int value() {
        return 1 << 16;
    }
}

使用自定义选项:

java
Chance<String> chance = Chance.<String, Throwable>newBuilder()
        .enableOpts(Opt.InternalOpt.values())
        .enableOpt(new CustomOpt())
        .withNeverRetry()
        .build();

贡献者

页面历史

Released under the MIT License.