强制Java不可变对象为Throwable类生成toString()

时间:2018-09-11 02:41:18

标签: java immutables-library

是否可以强制Java Immutables批注处理库为已经继承非默认toString()方法的抽象类生成toString方法?

例如:

@Value.Immutables
public abstract class MyRuntimeException extends RuntimeException {
    @Value.Default
    public abstract long timestamp();
    @Value.Redacted
    public abstract long secretTimestamp();
}

结果为:

MyRuntimeException e = ImmutableMyRuntimeException.builder().timestamp(111)
                                              .secretTimestamp(222).build();
assert e.toString().contains("111");
assert !e.toString().contains("222");

RuntimeException从Throwables继承了toString(),而到目前为止,我所看到的Immutables库正因为如此而跳过生成toString()。

1 个答案:

答案 0 :(得分:2)

有一种这样的方法。诀窍是用抽象值类型声明抽象toString方法签名。

@Value.Immutable
public abstract class MyRuntimeException extends RuntimeException {
    public abstract long timestamp();
    public abstract long secretTimestamp();
    @Override public abstract String toString(); //<-- forces toString impl
}