在Ada中,可以创建不兼容的等效数字类型:
type Integer_1 is range 1 .. 10;
type Integer_2 is range 1 .. 10;
A : Integer_1 := 8;
B : Integer_2 := A; -- illegal!
这可以防止意外的逻辑错误,例如向距离增加温度。
是否可以在Java中做类似的事情?例如
class Temperature extends Double {}
class Distance extends Double {}
Temperature temp = 20.0;
Distance distance = temp; // Illegal!
编辑
我发现了一个unrelated question with a related answer。当分配发生时,它使用注释和编译时的特殊处理器来发出警告。看来这是最轻松的方法-不需要特殊的类,因为它们会产生开发和执行上的惩罚。
答案 0 :(得分:4)
由于您在Java中指定的原因,包装对象并不常见。但是有可能。
而不是使用extends Double
(这是不起作用的,因为 Double 是最终的)。您可以改为使用委派。
public class Distance {
private double distance;
// constructor, getter, setter
}
public class Temperature {
private double temp;
// constructor, getter, setter
}
然后,以下内容将生成编译时错误。
Temperature temp = new Temperature(20.0);
Distance distance = temp; // Illegal!