2011-01-07 19 views
1

我希望能夠在代碼中聲明一個Java類參考,這樣我可以,在其他地方,做這樣的事情:如何在Java中聲明一個常量分層數據結構?

switch (v) 
{ 
case Ref.LicenseCode:      ....; 
case Ref.Widget.MaxWeight:    ....; 
case Ref.Widget.MolyBolt.ThreadsPerInch: ....; 
} 

參考旨在代表一個分層組常量常量數據結構值,例如經常出現在標準文件或其他參考資料中。我想要的值是真正不變的(所以它們可以在case語句中使用)。

我想我可以通過嵌套類定義來做到這一點,它的工作原理......至關重要。例如這樣的:

public final class Ref 
{ 
    public final static int LicenseCode = 800; 

    public final class Widget 
    { 
     public final static int MaxWeight = 5000; 
    } 
} 

讓我這樣寫:

switch (v) 
{ 
case Ref.LicenseCode:      ....; 
case Ref.Widget.MaxWeight:    ....; 
} 

但是當我嘗試拼圖下降到第三級:

public final class Ref 
{ 
    public final static int LicenseCode = 800; 

    public final class Widget 
    { 
     public final static int MaxWeight = 5000; 

     public final class MolyBolt 
     { 
      public final static int ThreadsPerInch = 12; 
     } 
    } 
} 

,有人告訴我:

"Ref.Widget.MolyBolt cannot be resolved or is not a field." 

我做錯了什麼?還是我碰到了Java的一個邊緣?有其他方法可以實現我的目標嗎?我使用Eclipse Java Development Tools 3.5.2.r352在Windows Vista,JCK 1.6.0-21下運行。

+2

MolyBolt不是一個領域。這是一堂課。你的意思是「Ref.Widget.MolyBolt.ThreadsPerInch」? – rfeak 2011-01-07 22:10:32

+0

對不起,我們嘗試引用Ref.Widget.MolyBolt.ThreadsPerInch,並且得到的錯誤是「Ref.Widget.MolyBolt無法解析或不是字段」。 – 2011-01-07 22:18:20

+0

這些古怪的常量,LicenceCodes和Weights等都是或多或少隨機的例子。我確實有一棵樹更有意義,但它是相當保密的。一個更真實的例子可能是關於太陽系的恆定值表,包括所有的行星和衛星。如果我可以寫: 案例Solar.Sun.Weight:....; case Solar.Mars.Deimos.Weight:....; 然後我可以做我需要的一切。 – 2011-01-07 22:21:23

回答

0

你如何參考ThreadsPerInch字段?這個工作對我來說:

public final class Ref { 
    public final static int LicenseCode = 800; 
    public final class Widget { 
     public final static int MaxWeight = 5000; 
     public final class MolyBolt { 
      public final static int ThreadsPerInch = 12; 
     } 
    } 
    public static void main(String[] args) { 
     int v = Integer.valueOf(args[0]); 
     switch (v) { 
      case Ref.LicenseCode: 
       break; 
      case Ref.Widget.MaxWeight: 
       break; 
      case Ref.Widget.MolyBolt.ThreadsPerInch: 
       break; 
     } 
    } 
} 

我會改變的唯一的事情就是讓內部類靜態的,但你可能不打算實例化這個類的任何對象反正。

2

看起來像物料清單的信息給我。將它嵌入到Java類中作爲靜態數據似乎對我來說非常嚴格。將它存儲在關係,分層,對象或圖形數據庫中是非常自然的。

另一個問題是,處理這個問題的代碼將是if/then/else的意大利麪林或切換語句來處理。

很難誇大這似乎是多麼的錯誤。你可能會得到一個答案,讓你繼續下去,但這隻能以悲傷告終。