2011-08-07 2 views
2

코드 완성을 사용할 때 Eclipse에서 enum 값을 확인하는 데 문제가 있습니다. XmlDataDefitions 클래스는 XML에서 파싱되는 데이터 스키마를 제공합니다. 하지만 XmlDataDefitions.xmlTagGroups.xmlLocationList.values().YYZ 또는 XmlDataDefinitions.xmlTagGroups.xmlLocationList.XmlTags.id으로 전화를 걸 수 없습니다. 코드 완성 & 컴파일러는 XmlTags이 보이지 않습니다.일식이 내 열거 형 값을 찾도록 도와 주시겠습니까?

Eclipse가 코드 완성시 XmlTags (열거 형 값)을 나열 할 수 없습니다. 이상적으로는

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에서 실제로 코드 완성을 사용하여 enum 값에 액세스해야합니까? –

+2

'XmlTags'의 마지막 쉼표는 단지 ​​실수입니까? – Roman

답변

2

문제는 당신의 열거 정적 내부 클래스이며, 믿을 수 없을 정도로 열거 값을 포함하는 클래스 내부 볼 수 아니라는 것이다 ... XmlDataDefinitions.xmlTagGroups.xmlLocationList.(something).XmlTags.id를 호출하고 싶습니다!

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

은 그럼 당신은 XmlTags.없이 (예를 들어) device_id을 사용할 수 있습니다 :

는이 클래스를 변화로 당신이 그들과 같이에서 정의 된 정적 수입에 열거 클래스 항목을 필요 해결하려면 자격.

크레이지, 알아요, 그렇습니다. 일단 정적 가져 오기를 추가하면 Eclipse는 코드를 예상대로 완료합니다.

다른 해결 방법은 열거 형을 자신의 클래스에 넣는 것입니다.하지만 보통은 내 열거 형을 사용/소유하는 클래스에 묶는 것을 선호합니다 (클래스 확장을 피하기 위해).

+0

답변 해 주셔서 감사합니다. 그러나 여전히 작동하지 않습니다. 여러분은 그것들을 '정의 된 다양한 클래스'로 임포트한다고 언급합니다. 클래스에는 이미 가져 오기가 있습니다. import com.AtClass.MessageMarker.XmlDataDefinitions.XmlTags; 위의 가져 오기로 바꾸면 도움이되지 않습니다. 나는 또한 그것을 사용할 클래스에서 가져 오기를 시도했다. 여전히 XmlDataDefinitions.xmlTagGroups.xmlLocationList를 호출 할 수 없습니다. 그 enum에 정의 된 tages를 완성하게하십시오. –

+0

정적 가져 오기가 제대로 작동합니다 (항상 사용함). 'Project> Build automatically '가 체크되어 있습니까? 빌드를 강제 실행하고 Eclipse를 닫았다가 다시 열어보십시오. 때때로 그것은 단지 "음모를 잃는다". – Bohemian

+0

1 초, 어떻게 액세스 할 수 있습니까? 예를 들어 xmlTagGroups.xmlLocationsList.device_id로? 나는 프로젝트를 청소하고 이클립스를 다시 시작했다. 아직 주사위가 없습니다. 코드 완성으로 인해 xmlTagGroups.xmlLocationList에서 열거 형의 내용이 표시되지 않습니다. –

0

이 컴파일러는 Windows XP/2000에서 컴파일 된 클래스의 경로가 259 자 이상인 before을 보았습니다. 이 경우에는이 깊이를 초과하는 경로가있는 정적 내부 클래스에 대한 클래스를 찾을 수 없습니다. 이러한 종류의 문제는 복잡한 XSD 스키마 및 생성 된 클래스로 작업 할 때 매우 일반적입니다.

더 짧은 클래스 이름/패키지를 사용하고 소스 코드를 디렉토리 구조의 루트에 가까운 곳으로 옮기는 것이 좋습니다.

1

나는 당신이 성취하려는 것을 정확히 모르겠다. 하지만 아마 theese와 같은 표현을 쓰고 싶습니까?

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

} 

?