问题描述
请提供一种使代码更简洁的方法- 为了避免重复类似/相同的动作- 我有一个进行对象验证的方法,但是大多数参数 相似/相同,例如为此使用某种lambda表达式, 但是对象不是来自同一棵树。
我的用例是这样的:
validate.( car );
我在其他地方做
validate.( person );
现在我正在像这样进行验证:
public boolean validate( Object obj ) {
if ( obj instanceof Car ) {
Car car = (Car) obj;
if ( car.getAge() <= 0 ) return false;
// many other checks which are repeated below
} else if ( obj instanceof Person ) {
Person person = (Person) obj;
if ( person.getAge() <= 0 ) return false;
// many other check which are repeating those above
}
// here I would like to do checks for both objects,but objects are from different roots
return true;
}
解决方法
您可以使用method overloading:
import controlP5.*;
ControlP5 cp5;
// range constants
final int RANGE_MIN = 4000;
final int RANGE_MAX = 5000;
// the smallest allowed difference between min/max values
final int RANGE_MIN_DIFFERENCE = 500;
final int RANGE_MID = RANGE_MIN + ((RANGE_MAX - RANGE_MIN) / 2);
int minValue;
int maxValue;
Numberbox inputMin;
Numberbox inputMax;
void setup() {
size(700,400);
PFont font = createFont("arial",18);
cp5 = new ControlP5(this);
inputMin = cp5.addNumberbox("minValue")
.setPosition(100,100)
.setSize(100,20)
.setFont(font)
.setScrollSensitivity(1.1)
// set initial acceptable range
.setMin(RANGE_MIN)
.setMax(RANGE_MAX)
// set default value
.setValue(4000)
;
inputMax = cp5.addNumberbox("maxValue")
.setPosition(100,150)
.setSize(100,20)
.setFont(font)
.setScrollSensitivity(1.1)
// set initial acceptable range
.setMin(RANGE_MIN)
.setMax(RANGE_MAX)
// set default value
.setValue(RANGE_MID + 1)
;
textFont(font);
}
void draw() {
constrainRangeInputs();
background(0);
fill(255);
text("minValue: " + minValue + "\n" +
"maxValue: " + maxValue,10,15);
}
void constrainRangeInputs(){
int rangeMinInt = (int)inputMin.getValue();
int rangeMaxInt = (int)inputMax.getValue();
//
if(abs(rangeMaxInt - rangeMinInt) < RANGE_MIN_DIFFERENCE){
if(rangeMaxInt > RANGE_MID){
inputMin.setValue(rangeMaxInt - RANGE_MIN_DIFFERENCE);
}else{
inputMax.setValue(rangeMinInt + RANGE_MIN_DIFFERENCE);
}
}
}
Master是Person和Car的公共父级(我假设有一个公共父级接口/类)。
,“不要”:
- 首先,我强烈建议您尽最大努力避免像现在那样设计方法; 从逻辑,建模或概念的角度来看,
-
Person
和Car
没有共同之处。他们也没有在现实生活中分享任何类似的特征; - 请勿在您的方法中接受
Object
作为参数。您将很难管理错误和/或保持不可预测的行为。
“做”:
- 遵循Single Responsibility Principle来定义您的方法;
- 从模型对象的角度考虑-作为行为的方法应该是什么?应该解决什么一个问题?
- 尝试将关注点分离到各自的类/文件/块单元中,并尽量避免重叠。
如果您想根据参数的实际实例来表现,最好的方法是使用instanceof
检查。
但是,您可以做的是设计一些适当的继承并接受超类型作为方法参数。这样一来,多态性就会开始,您的方法将只有一种逻辑。