为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以将对象传递给新的对象构造函数而不在其中使用它?

是否可以将对象传递给新的对象构造函数而不在其中使用它?

隔江千里 2022-09-07 16:53:04
是否可以将对象类型或只是将任何类型的类型传递到新对象的构造函数中,然后在构造函数中不使用它?目的是根据新对象所在的父类(它是聚合的)创建新对象,以便它根据这一事实为自己生成不同的变量。还是有更好的方法来做到这一点?public class ObjectA {    private MalleableObject obj;    public void createObject(){        obj = new MalleableObject(this);    }}public class ObjectB {    private MalleableObject obj;    public void createObject(){        obj = new MalleableObject(this);    }}public class MalleableObject{    private boolean doIBelongToA;    public MalleableObject(ObjectB obj){        doIBelongToA = false;    }    public MalleableObject(ObjectA obj){        doIBelongToA = true;    }}
查看完整描述

4 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您正在采用的方法肯定会起作用,但问题是它是否是一个好主意,答案取决于您试图解决的用例。


您询问了如何将对象作为构造函数中的参数而不使用它的问题


如果你没有使用传递参数的属性,那么为什么要在参数中获取它,为此我们有空的构造函数,即使你没有指定它是默认注入的


 public MalleableObject(ObjectB obj){

    doIBelongToA = false; // if you are directly setting the value without 

    //using obj b then use default constructor.

 }


public MalleableObject(ObjectA obj){

    doIBelongToA = true;

}


/*If you are interested in setting the value based on the reference only there 

  is no problem with your approach as well, One alternative you can take to 

  combine both of them in single constructor and check the reference and set 

  the value accordingly*/

如果您使用对象的属性来创建新对象,那么这当然是一个好主意,


复制构造函数(如果将同一对象用作参数),原型设计模式(如果正在创建具有已创建的类似对象的对象)


您给出的示例是一个非常基本的示例,它没有突出显示任何用例,因此不会建议您采用的方法


查看完整回答
反对 回复 2022-09-07
?
函数式编程

TA贡献1807条经验 获得超9个赞

更简单的方法只是在 MalleableObject 的构造函数中添加布尔变量。


public class ObjectA {

  private MalleableObject obj;

  public void createObject(){

    obj = new MalleableObject(true);

  }

}


public class ObjectB {

  private MalleableObject obj;

  public void createObject(){

    obj = new MalleableObject(false);

  }

}


public class MalleableObject{

  private boolean doIBelongToA;

  public MalleableObject(boolean doIBelongToA){

    this.doIBelongToA = doIBelongToA;

  }

}

这将很容易确保从类A创建的对象对于doIBelongToA具有值true。此外,如果添加,则不必为其他类添加不同的构造函数,从而确保可扩展性


查看完整回答
反对 回复 2022-09-07
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

上述方法有效,但这不是最佳实践,因此存在一些限制。我建议你使用生成器模式,您可以在其中创建使用生成器来创建对象,然后使用定义行为的方法。您将能够扩展它以在将来添加变量/业务逻辑。


查看完整回答
反对 回复 2022-09-07
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

虽然您没有直接使用它,但您肯定使用的是参数中的信息。就个人而言,我会保存引用,或者至少保存其类型,以备以后使用,以防您需要它并作为方法实现,但是您的方法在技术上没有任何问题:doIBelongToA


public class MalleableObject{

    private Class ownerType;


    public MalleableObject(Class ownerType) {

        this.ownerType = ownerType;

    }


    public boolean doBelongToA() {

        return ownerType.equals(ObjectA.class);

    }

}


查看完整回答
反对 回复 2022-09-07
  • 4 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号