强制 Java 不可变对象为 Throwable 类 生成 toString()
Force Java Immutables to generate toString() for Throwable classes
是否可以强制 Java Immutables 注释处理库为已经继承了非默认 toString() 方法的抽象 class 生成 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()。
有一种方法。诀窍是在抽象值类型中声明抽象 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
}
是否可以强制 Java Immutables 注释处理库为已经继承了非默认 toString() 方法的抽象 class 生成 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()。
有一种方法。诀窍是在抽象值类型中声明抽象 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
}