2011-08-07 59 views
2

我在使用代碼完成時讓Eclipse注意枚舉值時遇到了問題。 XmlDataDefitions類提供了將從XML解析的數據模式。但我似乎無法撥打XmlDataDefitions.xmlTagGroups.xmlLocationList.values().YYZXmlDataDefinitions.xmlTagGroups.xmlLocationList.XmlTags.id。代碼完成&編譯器似乎沒有可見的XmlTags幫助eclipse查找我的枚舉值?

由於某些原因,Eclipse無法在代碼完成中列出XmlTags(枚舉值)。理想情況下,我想打電話給XmlDataDefinitions.xmlTagGroups.xmlLocationList.(something).XmlTags.id ...

public class XmlDataDefinitions { 

    public static enum XmlTags { 
     id,device_id,screen_name, 
     title,message, 
     lat_coords,lng_coords,address_string, 
     loc_seen,account_pic, 
     from_device_id,to_device_id, 
     from_screen_name,to_screen_name, 
     date, 
    } 

    public static enum xmlTagGroups { 
     xmlLocationList(XmlTags.id, XmlTags.device_id, XmlTags.title, XmlTags.message, XmlTags.lat_coords, XmlTags.lng_coords, XmlTags.loc_seen), 
     xmlMemberList(XmlTags.id, XmlTags.device_id, XmlTags.screen_name, XmlTags.address_string, XmlTags.lat_coords, XmlTags.lng_coords, XmlTags.account_pic), 
     xmlChatList(XmlTags.id, XmlTags.from_device_id, XmlTags.to_device_id, XmlTags.from_screen_name, XmlTags.to_screen_name, XmlTags.message), 

     xmlLocationMessage(XmlTags.id, XmlTags.device_id, XmlTags.message,XmlTags.screen_name),  
     xmlChatMessage(XmlTags.id, XmlTags.from_device_id, XmlTags.to_device_id, XmlTags.from_screen_name, XmlTags.to_screen_name, XmlTags.message, XmlTags.date), 

     ; 

     public XmlTags[] tags; 

     private xmlTagGroups (XmlTags ... tags){ 
      this.tags = tags; 
     } 

     public XmlTags[] getTags(){ 
      return this.tags; 
     } 

    } 
} 
+0

你有沒有嘗試重新啓動日食?有時它會混亂起來。 –

+0

我剛剛那樣做,但沒有幫助。我應該如何實際訪問XmlDataDefinitions.XmlTagGroups.xmlLocationList中的枚舉值(使用代碼完成)? –

+2

「XmlTags」中的最後一個逗號只是一個錯誤類型? – Roman

回答

2

的問題是,你的枚舉是靜態內部類和令人難以置信的枚舉值都不可見包含類裏面!

要解決,你需要靜態導入的枚舉類的條目爲改變類定義它們的,是這樣的:

import static com.mycompany.mypackage.XmlDataDefinitions.XmlTags.*; 

然後你就可以使用device_id(例如)無XmlTags.資格。

瘋了,我知道,但它是。一旦添加了靜態導入,Eclipse將按預期編碼完成它們。

另一個解決方法是將枚舉放入他們自己的類中,但是和您一樣,我通常更喜歡將我的 枚舉綁定到使用/擁有它們的類(以避免類擴展 - 它有意義)。

+0

感謝您的回覆,但它仍然無效。你提到將它們導入'它們定義的不同類中'。該類已爲他們導入:import com.AtClass.MessageMarker.XmlDataDefinitions.XmlTags;用上面的導入替換它並沒有幫助。我也嘗試在將使用它們的類中導入它。我仍然無法調用XmlDataDefinitions.xmlTagGroups.xmlLocationList。並讓它完成該枚舉中定義的標記。 –

+0

靜態導入絕對有效(我一直都在使用它)。你有'項目>自動生成'勾選?嘗試強制構建並嘗試關閉Eclipse並重新打開它。有時它只是「失去了情節」。 – Bohemian

+0

一秒鐘,我該如何能夠訪問它?至於xmlTagGroups.xmlLocationsList.device_id例如?我試着清理項目並重新啓動eclipse。仍然沒有骰子。代碼完成無法顯示xmlTagGroups.xmlLocationList中枚舉的任何內容。 –

0

我見過這個before,其中在Windows XP/2000上編譯的類的路徑大於259個字符。在這種情況下,我最終會發現靜態內部類的類沒有找到錯誤,這些靜態內部類的路徑超過了這個深度。處理複雜的XSD模式和生成的類時,這些問題非常常見。

考慮使用較短的類名稱/包並將源代碼重定位到更接近目錄結構根目錄的某處。

1

我並不確定我知道你想要達到的目標。但是,也許你想寫這樣的表達?

import test.XmlTagGroup; 
import test.XmlTagGroup.XmlTag; 

public class TestIt { 
    public static void main(String[] args) { 
     System.out.println(XmlTagGroup.xmlChatList.tags.contains(XmlTag.id)); 
     System.out.println(""); 
     for (XmlTag tag : XmlTagGroup.xmlChatList.tags) 
      System.out.println(tag); 
    } 
} 

得到

true 

id 
message 
from_device_id 
to_device_id 
from_screen_name 
to_screen_name 

如果是的話,試試這樣說:

import java.util.*; 

public enum XmlTagGroup { 

    xmlLocationList(XmlTag.id, XmlTag.device_id, XmlTag.title, XmlTag.message, XmlTag.lat_coords, XmlTag.lng_coords, 
      XmlTag.loc_seen), 
    xmlMemberList(XmlTag.id, XmlTag.device_id, XmlTag.screen_name, XmlTag.address_string, XmlTag.lat_coords, 
      XmlTag.lng_coords, XmlTag.account_pic), 
    xmlChatList(XmlTag.id, XmlTag.from_device_id, XmlTag.to_device_id, XmlTag.from_screen_name, XmlTag.to_screen_name, 
      XmlTag.message), 
    xmlLocationMessage(XmlTag.id, XmlTag.device_id, XmlTag.message, XmlTag.screen_name), 
    xmlChatMessage(XmlTag.id, XmlTag.from_device_id, XmlTag.to_device_id, XmlTag.from_screen_name, 
      XmlTag.to_screen_name, XmlTag.message, XmlTag.date), 
    ; 

    public static enum XmlTag { 
     id, device_id, screen_name, title, message, lat_coords, lng_coords, address_string, loc_seen, account_pic, 
     from_device_id, to_device_id, from_screen_name, to_screen_name, date, 
    } 

    public SortedSet<XmlTag> tags; 

    private XmlTagGroup(XmlTag... tags) { 
     this.tags = Collections.unmodifiableSortedSet(new TreeSet<XmlTag>(Arrays.asList(tags))); 
    } 

}