Java 从另一个对象创建一个对象时,哪种做法更好

Java 从另一个对象创建一个对象时,哪种做法更好,java,Java,比如说,在Java中,我有两个类:- class A { int a; int b; String c; String d; } class B { int x; int y; String e; String f; } 现在,假设我有一个类A的对象,即AOObject,我想创建一个类B的对象,其中x对应于A,y对应于B,依此类推 因此,我通常认为人们有两种方式可以做到这一点:- 1. B bObject = new B(aOb

比如说,在Java中,我有两个类:-

class A {
    int a;
    int b;
    String c;
    String d;
}

class B {
    int x;
    int y;
    String e;
    String f;
}
现在,假设我有一个类A的对象,即AOObject,我想创建一个类B的对象,其中x对应于A,y对应于B,依此类推

因此,我通常认为人们有两种方式可以做到这一点:-

1. B bObject = new B(aObject.geta(), aObject.getb(), aObject.getc(), aObject.getd());
其中,B中为a中的所有参数定义了构造函数

2. B bObject = new B();
bObject.setx(aObject.geta())
bObject.sety(aObject.getb())
bObject.sete(aObject.getc())
bObject.setf(aObject.getd())
其中,值是使用setter给定的


哪种方法更好?或者在某些情况下,每种方法都更有意义。

您可以将
A
作为
B
的构造函数中的参数

class B {
    int x;
    int y;
    String e;
    String f;

    B(A aObject) {
        x = aObject.geta();
        y = aObject.getb();
        e = aObject.getc();
        f = aObject.getd();
    }
}
然后呢,

B bObject = new B(aObject);

B bObject=new B(aObject.geta(),aObject.getb(),aObject.getc(),aObject.getd()),这将是用其他方法创建对象的最佳实践。

在这种情况下,我认为构造函数方法更好。使用构造函数,您有机会使
B
对象不可变。如果你选择二传手,你将无法做到这一点

如果
A
B
关系非常密切,请尝试让
B
的构造函数接受
A

public B(A a) {
    x = a.getA();
    y = a.getB();
    e = a.getC();
    f = a.getD();
}

而且,创建这些类时,每个属性都对应于另一个类中的另一个属性的情况非常少见。如果
A
B
都是你写的,你确定你没有做错什么吗?考虑删除其中的一个。如果其中一个不是由您编写的,为什么要创建一个完全复制另一个类属性的类?您考虑过使用包装器吗?

您可以通过
构造函数
链接:

您应该使用
heritation
super
关键字将B类变量引用到A类参数,如下面的代码:

 class A {
            int a;
            int b;
            String c;
            String d;

            public A(int a, int b, String c, String d) {
                this.a = a;
                this.b = b;
                this.c = c;
                this.d = d;
            }
        }

        class B extends A{
            int x;
            int y;
            String e;
            String f;

            public B(int x, int y, String e, String f) {
                super(x,y,e,f);
//Above line call super class Constructor , Class A constructor .
                this.x = x;
                this.y = y;
                this.e = e;
                this.f = f;

            }
        }

        A ARefrenceobjB = new B(1,2,"str1","str2");

大多数情况下,我都会使用
构造函数
。如果不需要,我总是希望没有设置器,只有一个带所有可能字段的构造函数,以避免
半备份对象
,在数据对象(一个从数据库获取)和响应对象(一个由API返回)中有相同属性的情况下,这是必需的。那么,在这种情况下,通常应该使用什么?我不认为在这种情况下,响应对象必须是不可变的。@hatellla在这种情况下,请使用带有
A
的构造函数作为参数。我还建议您在
A
B
中添加
to响应对象
to数据对象
等方法。然后在这些方法中调用构造函数。我认为这样更具可读性。关于易变性,不可变对象通常是一个很好的实践。在可能的情况下总是这样做。