Java 8 avoids a large number of if / else statements
•
Java
I have something that looks like this:
public boolean isValidObject(SomeObject obj){
if(obj.getField() == null){
LOG.error("error code 1");
return false;
}
if(obj.getField().getSize() > 500){
LOG.error("error code 2");
return false;
}
......
if(someCondition()){
log something
return false;
}
return true;
}
What is the cleanest way to write this in Java 8 with Lambdas?
Solution
Use polymorphism for this purpose Create a class for each logical validator and link them to the list Here are the good answers you need:
public interface Validator<SomeObject>{
public Result validate(SomeObject object);
}
Execution:
public class SomeFieldSizeValidator implements Validator<SomeObject> {
@Override
public Result validate(SomeObject obj) {
// or you can return boolean true/false here if it's enough
return obj.getField().getSize() > 500 ? Result.OK : Result.Failed;
}
}
Call validation chain:
List<Validator> validators = ... create ArrayList of needed Validators
for (Validator v : validators) {
if (!v.validate(object)) {
... throw exception,you kNow validator and object here
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
