Java 8 为可选设置默认值的更好方法是什么
我有一个有这么多选项的模型对象。该模型对象用于整个事务。 在事务开始时,我需要在可选字段中输入默认值 所以 第一种方法是在一个具有非可选值的对象中进行转换,但我将毫无理由地拥有一个冗余类。第二种方法是我在下面所做的,但是有没有更好的方法来编写Java 8 为可选设置默认值的更好方法是什么,java-8,optional,Java 8,Optional,我有一个有这么多选项的模型对象。该模型对象用于整个事务。 在事务开始时,我需要在可选字段中输入默认值 所以 第一种方法是在一个具有非可选值的对象中进行转换,但我将毫无理由地拥有一个冗余类。第二种方法是我在下面所做的,但是有没有更好的方法来编写updateDefaults方法 class SampleRequest{ Optional<String> a; Optional<String> b; Optional<String> c; Optional&
updateDefaults
方法
class SampleRequest{
Optional<String> a;
Optional<String> b;
Optional<String> c;
Optional<String> d;
}
public void doSomething(SampleRequest sampleRequest){
updateDefaults(sampleRequest)
call other services ...
}
void updateDefaults(SampleRequest sampleRequest){
String aa= sampleRequest.getA().orElse("A"); // Application specific complex logic. values has to be set
sampleRequest.setA(Optional.of(aa));
and so one....
}
类采样器请求{
任择a;
可选b;
任选c;
任选d;
}
公共空隙剂量测定(采样器测定采样器测定){
UpdatedFaults(sampleRequest)
呼叫其他服务。。。
}
无效更新故障(SampleRequest SampleRequest){
字符串aa=sampleRequest.getA().orElse(“A”);//特定于应用程序的复杂逻辑。必须设置值
取样器要求刚毛(可选的(aa));
还有一个。。。。
}
编写updateDefaults方法的更好方法是什么?我可能会使用装饰器
interface Request {
Optional<String> getA();
}
class SampleRequest implements Request {
private final String a;
public Optional<String> getA() {
return Optional.ofNullable(a);
}
}
// Decorator
class DefaultingRequest implements Request {
private final Request delegate;
public Optional<String> getA() {
return Optional.of(
delegate.getA().orElse(DEFAULT_A)
);
}
}
您也可以引入一个新接口。这样做的缺点是,您不能将
请求
与FilledRequest
一样处理。好处是您知道是否已经应用了默认值。使用上述方法,您可以不必要地多次包装相同的内容
interface Request {
Optional<String> getA();
FilledRequest toFilledRequest();
}
class SampleRequest implements Request {
//...
public FilledRequest toFilledRequest() {
return new FilledSampleRequest(this);
}
}
interface FilledRequest { // the same as Request, but not Optional
String getA();
}
class FilledSampleRequest {
private final SampleRequest sampleRequest;
public String getA() {
return sampleRequest.orElse(DEFAULT_A);
}
}
接口请求{
可选的getA();
FilledRequest to FilledRequest();
}
类SampleRequest实现请求{
//...
公共填写填写的要求填写申请表(){
返回新填写的SampledRequest(本);
}
}
接口FilledRequest{//与请求相同,但不是可选的
字符串getA();
}
类filledSamplerRequest{
私人最终采样器测试;
公共字符串getA(){
返回sampleRequest.orElse(默认值);
}
}
如果您有变量的默认值,那么可选
的用途是什么。。。我把它们拿走了。。。之前我有期权,交易中的每个后续服务都以自己的方式处理期权。。。但是现在我们有了一个通用的规则引擎,可以在开始时设置默认值,所以删除可选的并重构底层事务代码是有意义的。我很懒,刚开始就开始工作。
interface Request {
Optional<String> getA();
FilledRequest toFilledRequest();
}
class SampleRequest implements Request {
//...
public FilledRequest toFilledRequest() {
return new FilledSampleRequest(this);
}
}
interface FilledRequest { // the same as Request, but not Optional
String getA();
}
class FilledSampleRequest {
private final SampleRequest sampleRequest;
public String getA() {
return sampleRequest.orElse(DEFAULT_A);
}
}