2013-10-17 20 views
0

所以我特地翻過這段代碼同時通過org.eclipse.ui.internal.Workbench scavaging:的Java布爾數組與一個元素

 final boolean[] initOK = new boolean[1]; 

     if (getSplash() != null) { 

      final boolean[] initDone = new boolean[] { false }; 
      final Throwable[] error = new Throwable[1]; 
      Thread initThread = new Thread() { 
       /* 
       * (non-Javadoc) 
       * 
       * @see java.lang.Thread#run() 
       */ 
       public void run() { 
        try { 
         // declare us to be a startup thread so that our 
         // syncs will be executed 
         UISynchronizer.startupThread.set(Boolean.TRUE); 
         initOK[0] = Workbench.this.init(); 
        } catch (Throwable e) { 
         error[0] = e; 
        } finally { 
         initDone[0] = true; 
         display.wake(); 
        } 
       } 
      }; 
      initThread.start(); 

      .............. 
     } 

什麼是隻有一個要素創建陣列的目的是什麼?速度更快嗎?我在這裏肯定錯過了一些東西。

+2

的那唯一的好處,它想到的是,你能夠改變這個數組的第一個元素,而不是該數組本身,因爲它是'final'。例如:您可以更改匿名內部類中的內容。 – Baz

+1

這些變量可以用作接受數組類型參數的某個方法的參數。 – ovunccetin

+0

@Baz神聖的廢話,這是如此明顯。發佈它作爲答案。 – GGrec

回答

3

使用這種方法的優點是,陣列不能被修改(因爲它們是final),然而,它們的內容可以改變。

一個有用的例子是,你可以使用這些陣列和修改匿名內部類的第一個項目,而不必讓他們(static)領域。


如上述註釋中所述,另一個用例是該數組可用於將它傳遞給期望數組類型的方法。

+1

備用模式是使用單場原始包裝,像「類bool_wrapper {布爾b;}」,然後「最終bool_wrapper富=新bool_wrapper(); foo.b = TRUE; //等等」 - 基本上相同的情況下1,即提供用於原始可變最終對象類型 – vaxquis

相關問題