public interface Function {
double apply(double arg);
Function derivative();
String toString();
}
public interface Integrable extends Function {
Function integrate();
}
public class Sum implements Function {
private Function func1, func2;
public Sum(Function func1, Function func2) {
this.func1 = func1;
this.func2 = func2;
}
@Override
public double apply(double arg) {
return func1.apply(arg) + func2.apply(arg);
}
@Override
public Function derivative() {
return new Sum(func1.derivative(), func2.derivative());
}
@Override
public String toString() {
return func1.toString() + " + " + func2.toString();
}
@Override
public Function integrate() {
//TODO only allow if (this instanceof Integrable)
try {
return new Sum(((Integrable) func1).integrate(), ((Integrable) func2).integrate());
} catch (ClassCastException e) {
throw new RuntimeException("could not call integrate on one of the functions of this sum, as it is not of type Integrable");
}
}
}我正在尝试创建上面的Sum类,但只有在两个函数都是Integrable的情况下,它才应该是Integrable类型。否则,它应该只是一个Function。
有没有什么方法可以有效地做到这一点,或者更好的做法是在默认情况下设置为Integrable并检查integrate()中的2个字段
发布于 2018-12-04 00:35:26
我要说的是,在这种情况下,Sum的参数必须接受Integrable。
您可以创建两个类- Sum和IntegrableSum (uhh..需要一个更好的名字)
class Sum implements Function {
public Sum(Function func1, Function func2) {
....
}
}
class IntegrableSum implements Integrable {
public IntegrableSum(Integrable integrable1, Integrable integrable2) {
....
}
}发布于 2018-12-04 00:54:39
我建议您创建实现Integrable接口的适配器类,为您选择的各个抽象方法提供默认实现。但是我不认为你可以基于条件在Java中创建一个类,因为在Java中创建的类是直接的,我的意思是在创建之前你应该知道你的类是关于什么的。
https://stackoverflow.com/questions/53597899
复制相似问题