所以我试图创建一个(不同)对象的数组(其中一个在“Triangle”类中定义的对象),在弄乱它一段时间后,这就是我得到的:
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 因为“Object obj”不被识别为三角形对象。
那么基本上,有没有办法让通用对象被识别为特定对象?如果没有,您是如何解决这个问题的?
最佳答案
有一种方法,尽管我个人认为它的用法不是很干净。在这里
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);
}
...
}
为什么我觉得这不是很干净?首先,如果该对象不是三角形,我不知道该怎么办。您必须弄清楚这一点,这意味着如果该构造函数接收到一个不是三角形的对象,您会怎么做?抛出异常?不确定...这通常不会发生在经常使用 instanceof
的 equals
等方法中,因为这样您就知道您只是返回 false
。
但是,至少你知道如何“将物体识别为三角形”。
希望这有帮助
关于java - 将 Object 类型的对象复制到特定类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21091343/