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

标签 java

所以我试图创建一个(不同)对象的数组(其中一个在“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);
  }
...
}

为什么我觉得这不是很干净?首先,如果该对象不是三角形,我不知道该怎么办。您必须弄清楚这一点,这意味着如果该构造函数接收到一个不是三角形的对象,您会怎么做?抛出异常?不确定...这通常不会发生在经常使用 instanceofequals 等方法中,因为这样您就知道您只是返回 false

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

希望这有帮助

关于java - 将 Object 类型的对象复制到特定类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21091343/

相关文章:

java - junit:forkMode ="once"对测试正确性的影响

java - Java中如何获取特定包中的所有Class文件?

java - 如何按Java中的两个字段排序?

java - 如何在不转向 boolean 开关参数的情况下避免代码重复?

java - JNI 和 Java : ant calling make or make calling ant?

Java实时性能

java - Akka actor 实现 : extension or injection?

java - 在 Java 中表示 "Both not null and not equal"的实用方法

java - Spring Boot注入(inject)facebook bean返回null

java - Parceler 和 SimpleXml 如 Parceler 的自述文件所述