需要一个包含单位的类型的简单示例
我有一个处理角度相当多的代码库,但有时输入以不同的角度格式。也就是说,有些格式是顺时针度数,有些是逆时针度数,有些是0到360度,有些是-180到180度,有些是弧度...需要一个包含单位的类型的简单示例
到目前为止,我成功地保持它们都一样在内部,但它总是令人担忧,并且出现的错误很难追查到。
我想创建一个角度类,跟踪单位和方向以及幅度,以便我可以以统一的方式处理它们,而没有太多的担忧。
我的谷歌搜索引起了马丁福勒的Value Object,但我无法理解他的语言,没有一个简单的例子来参考。我还发现一个Java API似乎有关,但它看起来并不像一个简单例如要么...
任何人都可以点我朝着这一合并单位类的简单的例子?
我会通过在内部以单一格式(例如正弧度)存储值来提供这种方法,并提供静态工厂方法来构建各种输入格式的角度。例如:
public class Angle {
private final double radians;
private Angle(double radians) {
this.radians = radians;
}
// Static factory methods
public static Angle radians(double rad) {
return new Angle(rad);
}
public static Angle degrees(double deg) {
return radians(Math.toRadians(deg));
}
public static Angle degreesCCW(double deg) {
return degrees(360 - deg);
}
...
// Operations
public Angle plus(Angle other) {
return new Angle((this.radians + other.radians) % (2 * Math.PI));
}
...
}
然后,你可以使用这样的:
Angle a1 = Angle.radians(0.5);
Angle a2 = Angle.degreesCCW(60);
Angle a3 = a1.plus(a2);
这看起来很完美。简单而重要。谢谢。 – tugs 2012-08-03 19:07:02
你需要的东西是这样的:
class Measurement
{
double amount;
Unit unit;
}
量将是“号”,和单位将告诉你如何解释这个数字...你可能还需要实现数字一些逻辑,或“表转换”,以便能够在不同的单位之间进行转换...
这是一个很棒的图书馆在Smalltalk:Aconcagua。它也有一个paper。 这是另一个非常好的C++:Boost units。
你需要记住原单位,否则会好起来的一切转化为公共单位里面的类? – casablanca 2012-08-01 02:29:09
我希望能够以各种单位存储和检索角度。我不知道在课堂上转换为一个单元并提供存取器转换或存储单元(然后还要在存取器上进行有条件转换...?) – tugs 2012-08-01 16:11:54
您是否还可以详细说明“各种单位”?你有更多的单位,而不仅仅是度和弧度? – casablanca 2012-08-02 01:48:26