【发布时间】:2016-06-19 12:56:46
【问题描述】:
在 Haskell 中,我们可以定义具有多个互斥值构造函数的类型,例如 Maybe 类型,其定义如下:
data Maybe a = Nothing | Just a
其中“a”是任何现有类型。如果我们可以在 Java 中做类似的事情,那就太好了。例如,如果我们想在 Haskell 中定义一个扩展实数,我们可以这样做
data ExtendedReal = Infinity | Real Double
在 Java 中,我能想到的创建具有类似功能的类的唯一方法是在类中放置一个布尔标志来覆盖双精度。例如,我们可以这样做
public class ExtendedReal {
private double real;
private boolean isInfinity;
public ExtendedReal() {
isInfinity = true;
}
public ExtendedReal(double real) {
this.real = real;
}
...
...
}
然后检查所有方法中的标志。
有没有更规范的方法来实现这一点?
【问题讨论】:
-
你的结局是什么?
-
Double 已经代表无穷大,而且比这个更好(它区分了正无穷和负无穷);您可以通过
Double.isInfinite进行检查。 -
@AndyTurner 是的,但这是一个比实现双打更普遍的问题。