将Object类型的对象复制到特定类型的对象中

时间:2014-01-13 12:28:46

标签: java

所以我试图制作一系列(不同的)对象(其中一个在' 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;未被识别为三角形对象。

基本上,是否有办法将通用对象识别为特定对象?如果没有,你怎么接近这个?

1 个答案:

答案 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

但是,至少你知道如何“将对象识别为三角形”。

希望这有帮助