Java 从另一个对象创建一个对象时,哪种做法更好
比如说,在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
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数据对象
等方法。然后在这些方法中调用构造函数。我认为这样更具可读性。关于易变性,不可变对象通常是一个很好的实践。在可能的情况下总是这样做。