我还没有使用泛型,所以我不确定如何在我的情况下使用它们。我要实现的目标是创建一个将在其中使用泛型的超类Vector,然后创建3个子类,其中将泛型类型设置为维之一。这是我现在拥有的:
interface sample {
Vector sum(Vector vec);
Vector subtraction(Vector vec);
int product(Vector vec);
boolean compare(Vector vec);
String ToString();
}
abstract class Vector implements sample {
int[] coordinates;
public Vector(int[] coordinates) {
this.coordinates = coordinates;
}
abstract Vector resVec();
public Vector sum(Vector vec) {
Vector result = resVec();
if (this.coordinates.length == vec.coordinates.length) {
for (int i = 0; i < vec.coordinates.length; i++) {
result.coordinates[i] = this.coordinates[i] + vec.coordinates[i];
}
} else {
throw new ArithmeticException("Can't sum vectors of different length");
}
return result;
}
和两个子类,例如: 1)
class Vector3D extends Vector {
public Vector3D(int n1, int n2, int n3) {
super(new int[]{n1, n2, n3});
}
public Vector3D resVec() {
Vector3D resVec = new Vector3D(0, 0, 0);
return resVec;
}
public Vector3D sum(Vector vec) {
return (Vector3D) super.sum(vec);
}
2)
class Vector5D extends Vector {
public Vector5D(int n1, int n2, int n3, int n4, int n5) {
super(new int[]{n1, n2, n3, n4, n5});
}
public Vector5D resVec() {
Vector5D resVec = new Vector5D(0, 0, 0, 0, 0);
return resVec;
}
public Vector5D sum(Vector vec) {
return (Vector5D) super.sum(vec);
}
因此,例如,如果要输入以下内容,我想要得到的结果是:Vector3D vec1 = new Vector3D(1,2,3); Vector5D vec2 =新的Vector5D(1,2,3,4,5);并使用A.sum(B);由于将错误的变量类型传递给sum方法,我应该得到一个编译错误。谢谢!
答案 0 :(得分:0)
这不是类型层次结构的责任;这是具体班级的责任。
这里最大的事情是您的sum
方法接受一种Vector
类型,并且该sum
方法的实现者应该知道它们是有效类型还是无效类型可以胜任。实际需要的只是向您的instanceof
方法添加sum
支票。
如果您想确保向量集合之间的类型同质性,泛型会有所帮助,但是当您知道每个向量都可以运行的事实时,在这种情况下,我认为它没有太大的价值。