首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果字段实现了接口,如何实现该接口

如果字段实现了接口,如何实现该接口
EN

Stack Overflow用户
提问于 2018-12-04 00:29:16
回答 2查看 55关注 0票数 0
代码语言:javascript
复制
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个字段

EN

回答 2

Stack Overflow用户

发布于 2018-12-04 00:35:26

我要说的是,在这种情况下,Sum的参数必须接受Integrable

您可以创建两个类- SumIntegrableSum (uhh..需要一个更好的名字)

代码语言:javascript
复制
class Sum implements Function {
    public Sum(Function func1, Function func2) {
       ....
    }
}

class IntegrableSum implements Integrable {
    public IntegrableSum(Integrable integrable1, Integrable integrable2) {
       ....
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-12-04 00:54:39

我建议您创建实现Integrable接口的适配器类,为您选择的各个抽象方法提供默认实现。但是我不认为你可以基于条件在Java中创建一个类,因为在Java中创建的类是直接的,我的意思是在创建之前你应该知道你的类是关于什么的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53597899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档