如何创建一个抽象的、不可变的类?
2022-09-02 01:11:05
这是简短的版本。首先,也是最重要的一点:我希望我的班级是不可改变的。我知道一个类不能既是抽象的,又是最终的。我要问的是:有没有办法只允许内部类扩展和实现外部抽象类?这可能不是实现我不变目标的最佳方法,所以如果有人有更好的设计,我很乐意听到它。
我正在写一个向量运算类 -- 就像物理和工程一样,而不是编程意义上的。(我也知道JScience有一个软件包来做这类事情。我想写我自己的,并保持简单。
我喜欢Java的几何包中使用的模式,例如,可以使用两个精度级别之一创建a:浮点数或双精度级。Line2D
public abstract class Line2D {
public static class Float extends Line2D { /* Implementation */ }
public static class Double extends Line2D { /* Implementation */ }
}
这是我真正想在课堂上整合和扩展的功能,所以我创建了以下内容:
public abstract class Vector2D {
public final static class Integer extends Vector2D {
// Component length projected along x/y axis, respectively
final private int i, j;
public Integer( int i, int j ) {
this.i = i;
this.j = j;
}
public Object doStuff() { /* vector operations */ }
}
public final static class Float extends Vector2D {
// Identical to Vector2D.Integer, except with floats
}
public final static class Double extends Vector2D { /* Same Idea */ }
// Outer class methods and whatnot
}
显然,、 和 都是最终的。有没有办法使除这些内部类之外的所有内容都成为最终的?Vector2D.Integer
Vector2D.Float
Vector2D.Double
Vector2D