以下是简短版。首先:我希望我的类是不可变的。我知道一个类不能同时是抽象和最终的。我的问题是:是否有一种方式只允许内部类扩展和实现外部抽象类?这可能不是达到我的不可变目标的最佳方法,所以如果有人有更好的设计,我很乐意听取建议。
我正在编写用于向量操作的类,例如在物理和工程中使用,而不是编程中的向量操作。(我也知道JScience有一个包 可以处理这种东西。我想自己写,并保持简单。)
我喜欢Java几何包中使用的模式,例如可以使用两种精度级别之一(float或double)创建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
都是final类型。有没有办法使Vector2D
对这些内部类以外的所有内容都是final的呢?
Stream
的特殊化为DoubleStream
也有其原因... - Marco13