我知道这可以在Ada中完成,但我是Java新手,不知道我是否可以这样做。我想从0到2pi制作一个浮子子类型的弧度。超出范围的值将被视为超出范围并通过约束错误。任何帮助表示赞赏!
答案 0 :(得分:4)
Java中没有构建Range对象,但您总是可以使用Apache Commons http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/math/Range.html
中的内容答案 1 :(得分:4)
commons.lang.math.Range只指定范围约束。它不代表该范围内的值(我认为这就是您想要的)。
您可以创建一个新类来保存值并强制执行约束。您自己的程序将传递此类的实例,从而获得类型安全性(强制执行约束)。调用其他API时,您必须恢复为发送和接受常规double值。您可以在接受返回值之前再次检查约束。
public class Radian extends Number {
private final double value;
public Radian(double value){
if (value < 0 || value >= 2 * PI)
throw new IllegalArgumentException(value + " is out of range");
this.value = value;
}
public double doubleValue(){
return value;
}
// ... and other methods in the Number interface
// don't forget equals and hashCode and toString
}
答案 2 :(得分:0)
Java无法声明基本类型的类似Ada的子类型,特别是无法声明作为基本类型子范围的类型。
您可以在Java中做的最好的事情是为基本类型创建自定义包装类,并让包装器使用(纯粹)运行时检查来强制执行范围约束。