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();

 

   }

}


當然以上都是適用於初始化的時候需要較多參數的類,但是如果參數較少建議使用靜態工廠代替構造器


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章