创建不兼容的数字子类型

时间:2018-12-10 23:47:45

标签: java ada

在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。当分配发生时,它使用注释和编译时的特殊处理器来发出警告。看来这是最轻松的方法-不需要特殊的类,因为它们会产生开发和执行上的惩罚。

1 个答案:

答案 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!