2012-09-11 20 views
1

我有一個類中有一些小類,它充當常量的「存儲單元」。問題是,我需要一些信息來爲這些常量賦值,而我只在構造函數中獲取這些信息。不幸的是,miniclass沒有在構造函數中聲明,而且NetBeans告訴我,即使只聲明瞭,未初始化,我也不能分配給最終變量。我應該怎麼做呢?單獨聲明並分配給一個最終變量 - Java

編輯:這將有這個問題的一些代碼示例:

public class Car { 
    class constants { 
     public final String MAKE; 
     public final String REGISTRATION_NUMBER; 
    } 
    public Car(String make, String regNumber) { 
     constants.MAKE = make; 
     constants.REGISTRATION_NUMBER = regNumber; 
    } 
} 
+3

告訴我們一些代碼? – kosa

+0

對不起,代碼正常運行。 – Bluefire

+0

我猜你的「小類」也需要構造函數。外部類構造函數然後可以傳遞參數。 –

回答

9

什麼你正在嘗試做的,因爲你需要你的Constants類的實例某處不能工作。一種方法是如下這樣做,但再沒有什麼固定關於恆...

public class Car { 
    class Constants { 
     public final String MAKE; 
     public final String REGISTRATION_NUMBER; 
     private Constants(String make, String regNumber) { 
      this.MAKE = make; 
      this.REGISTRATION_NUMBER = regNumber; 
     } 
    } 

    public final Constants constants; 
    public Car(String make, String regNumber) { 
     this.constants = new Constants(make, regNumber); 
    } 
} 

然後,您可以撥打:

Car car = new Car("abc", "def"); 
String make = car.constants.MAKE; 

注:一個可能會更好(更簡單)設計將

public class Car { 
    private final String make; 
    private final String regNumber; 

    public Car(String make, String regNumber) { 
     this.make = make; 
     this.regNumber = regNumber; 
    } 

    //getters 
} 
+6

第二個例子簡單得多,其他人在查看代碼時更容易理解它,因爲它遵循已被接受的Java實踐。讓內心階層去控制這些領域是矯枉過正的。 – Alex

+1

@Alex完全同意。 – assylias