java 构造器探秘



Java的构造器遇到比较多的参数的时候,又需要对参数做出选择性的实例化。这种时候又不能把每一种构造器可能的类型全部都创建出来。所以在这种时候有以下集中解决方案:

  1. 最常见的使用重叠构造器:

    就是 public create(int a,int b, int c,int d){

    this.a = a;   this.b= b;   this.c = c;   this.d = d;

    }

    public create(int a,int b, int c){

    create(int a,int b, int c,0);

    }

    create(int a,int b){

    create(int a,int b, 0);

    }

     

    create(int a){

    create(int a,0);

    }

     

  2.   但是重叠构造器有缺陷,当参数过多的时候就会难以编写。所以可以采用settergetter这种javaBean方式的方法选择性创建。

但是这种方法难以维护在多线程中的对该类的原子性操作,一般都得对其进行线程的同步。

public class Test {

   private int a;

   private int b;

   private int c;

   public void setA(int a) {

      this.a = a;

   }

   public void setB(int b) {

      this.b = b;

   }

   public void setC(int c) {

      this.c = c;

   }

   public int getA() {

      return a;

   }

   public int getB() {

      return b;

   }

   public int getC() {

      return c;

   }

  

 

}

 

  

  1.   最后是建造器(builder)的应用,在android中的Alertdialog.Builder就是采用的这种模式,它可以一次性创建好视力就不必担心原子性操作的问题。

 

public class Test {

   private int a;

   private int b;

   private int c;

   Builder builder;

   public void setA(int a) {

      this.a = a;

   }

   public void setB(int b) {

      this.b = b;

   }

   public void setC(int c) {

      this.c = c;

   }

   public void print(){

      System.out.println(a+b+c);

   }

   public static class Builder {

      private Test test;

 

      public Builder() {

        test = new Test();

      }

 

      public Builder setA(int a) {

        test.setA(a);

        return this;

      }

 

      public Builder setB(int b) {

        test.setB(b);

        return this;

      }

 

      public Builder setC(int c) {

        test.setC(c);

        return this;

      }

     

      public Test create(){

        return test;

      }

   }

 

   public static void main(String args[]) {

      Builder builder = new Test.Builder();

      Test test = builder.setA(1).setB(1).setC(1).create();

      test.print();

 

   }

}


当然以上都是适用于初始化的时候需要较多参数的类,但是如果参数较少建议使用静态工厂代替构造器


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值