![](/img/trans.png)
[英]Generics and using newly created methods in a Class that implements Iterable Interface
[英]Using generics in abstact class that implements interface
我还没有使用泛型,所以我不确定如何在我的情况下使用它们。 我要实现的目标是创建一个将在其中使用泛型的超类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方法,我应该得到一个编译错误。 谢谢!
这不是类型层次结构的责任。 这是具体班级的责任。
这里最大的事情是您的sum
方法正在接受Vector
的类型,并且该sum
方法的实现者应该知道什么是有效类型,哪些不是可以对其执行的有效类型。 实际需要的只是向您的sum
方法添加instanceof
check。
如果您想确保向量集合之间的类型同质性,则泛型会有所帮助,但是当您知道每个向量可以执行的操作时,在这种情况下,我认为它没有太大的价值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.