所以我试图制作一系列(不同的)对象(其中一个在' Triangle'类中定义),在搞乱了一段时间之后,这就是我和#39;有:
public class ShapeContainer {
private Object objects [];
private int _size;
public static final int init_size = 3;
public ShapeContainer(ShapeContainer other){
this.objects = new Object[other.objects.length];
this._size = other._size;
for(int i=0; i<_size ;i++){
if (other.objects[i].getClass().equals(Triangle.class)){
this.objects[i] = new Triangle(other.objects[i]);
}
}
}
}
为了实现这一点,我在Triangle类中创建了一个新的构造函数(注意:Triangle是由3个Point对象构建的:Point p1,Point p2,Point p3。每个Point对象都是由2个double构建的变量:x,y):
public Triangle (Object obj){
this.p1 = new Point(obj.p1);
this.p2 = new Point(obj.p2);
this.p3 = new Point(obj.p3);
}
现在问题是我无法引用obj.p1 / obj.p2 / obj.p3因为&#34;对象obj&#34;未被识别为三角形对象。
基本上,是否有办法将通用对象识别为特定对象?如果没有,你怎么接近这个?
答案 0 :(得分:1)
有一种方法,虽然我个人认为它的使用不是很干净。这是
public Triangle(Object obj){
if (obj instanceof Triangle){
Triangle other = (Triangle) obj;
this.p1 = new Point(other.p1);
this.p2 = new Point(other.p2);
this.p3 = new Point(other.p3);
}
...
}
为什么我认为这不是很干净?好的开始我不知道如果对象不是三角形该怎么办。你必须弄明白这一点,这意味着如果构造函数接收到一个不是三角形的对象,你会怎么做?抛出异常?不确定......这通常不会发生在经常使用equals
的{{1}}等方法中,因为您知道只返回instanceof
。
但是,至少你知道如何“将对象识别为三角形”。
希望这有帮助