gpt4 book ai didi

java - 在利用多态性的同时避免类创建

转载 作者:行者123 更新时间:2023-12-01 23:03:05 25 4
gpt4 key购买 nike

总的来说,我对 java 或 oop 并没有很多实际经验,所以现在我遇到了一个问题,这个问题可能很容易解决,但我根本不确定如何优雅,面向 oop 的解决方案可能看起来像这样。

这是一个简化的概要:

假设我想编写某种计算应用程序,它首先包含几种方法,例如:

static double sine(double x){...}
static double cosine(double x){...}

等等。然后,其他一些静态方法将执行某种涉及这些函数之一的导数的计算。如果我们假装没有办法近似该导数,我想到的最简单的解决方案是将上面的每个方法包装在一个类中,并让这些类实现一个“Differentiable”接口(interface)定义方法“evaluateDerivative”,例如:

interface Differentiable {
double evaluateDerivative(double x);
}

class sine implements Differentiable {
static double evaluate(double x){
return...;
}

public double evaluateDerivative(double x) {
return cosine.evaluate(x);
}
}

因此,如果我需要任何方法的导数进行其他计算,我可以简单地执行如下操作:

static double returnDerivativePlusOne(Differentiable d, double x){          
return d.evaluateDerivative(x) + 1;
}

好吧,现在的问题是:当我真正想调用上面的方法时,我需要一个 sine 类的实例,例如:

DerivativePlusOne(new sine(), 1);

这实际上没有意义,因为 sine 类只包含静态方法(可能还包含一些最终字段),因此创建对象对我来说似乎很奇怪。

那么,是否有一种不同的方法可以以更优雅的方式产生相同的结果?任何帮助将不胜感激。

最佳答案

为什么不将 evaluateDerivative 函数也设为静态。不需要接口(interface)。

要利用多态性,我们可以执行以下操作。假设我们正在执行以下操作:我们有两个类 Sine 和 Cosine,以及一个接口(interface) Differentiable。

interface Differentiable {
double evaluateDerivative(double x);
}

class Sine implements Differentiable {
static double evaluate(double x){return...}
public double evaluateDerivative(double x) {return somevalue;}
}

class Cosine implements Differentiable {
static double evaluate(double x){return...}
public double evaluateDerivative(double x) {return somevalue;}
}

在这种情况下,要利用多态性,您可以做的是:

Differentiable d = new Sine();
double derivative = d.evaluateDerivate();
d = new Cosine();
derivative = d.evaluateDerivate();

希望有帮助。

关于java - 在利用多态性的同时避免类创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com