我有这样的课
class Calculate {
int operation(int a, int b){
return Math.max(a,b);
}
int calc(int a, int b){
int x=100+a*b;
int y=a+a*b;
retun operation(x,y);
}
int calc1(int a, int b){
int x=100+a*b;
int y=b+a*b;
return operation(x,y);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我创建这个类的两个对象,因为
Calculate obj1=new Calculate();
Calculate obj2=new Calculate();
我想要类的函数操作计算为obj1返回两个值的最大值,并返回obj2的两个值的最小值.可以这样做吗?
我只能想到创建两个不同的类Calculate1和Calculate2,并在Calculate1中将操作定义为最大值,在Calculate2中定义最小值,并将其定义为与其相同.我希望在不定义两个类的情况下也可以使用一些更简单
您可以通过操作来构造函数的IntBinaryOperator,例如:
class Calculate {
private final IntBinaryOperator op;
public Calculate(IntBinaryOperator operator) {
this.op = operator;
}
int operation(int a, int b) {
return op.applyAsInt(a, b);
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以写:
Calculate c1 = new Calculate(Math::max);
Calculate c2 = new Calculate(Math::min);
Run Code Online (Sandbox Code Playgroud)
添加操作很容易 - 比如你想要总和而不是最小值或最大值:
Calculate c3 = new Calculate((x, y) -> x + y);
Run Code Online (Sandbox Code Playgroud)
您可以覆盖该operation方法.
如果您不想创建显式子类,可以使用匿名类执行此操作:
Calculate obj1=new Calculate();
Calculate obj2=new Calculate() {
int operation(int a, int b){
return Math.min(a,b);
}
};
obj1.operation(a,b) // calculates maximum
obj2.operation(a,b) // calculates minimum
Run Code Online (Sandbox Code Playgroud)