Java 帮助eclipse查找我的枚举值?
在使用代码完成时,我很难让Eclipse注意到枚举值。Java 帮助eclipse查找我的枚举值?,java,eclipse,enums,Java,Eclipse,Enums,在使用代码完成时,我很难让Eclipse注意到枚举值。xmldatadefinations类提供将从XML解析的数据模式。但我似乎无法调用XmlDataDefinitions.xmlTagGroups.xmlLocationList.values().YYZ或XmlDataDefinitions.xmlTagGroups.xmlLocationList.XmlTags.id。代码完成&编译器似乎没有可见的XmlTags 由于某些原因,Eclipse无法在代码完成时列出XmlTags(枚举值)。理
xmldatadefinations
类提供将从XML解析的数据模式。但我似乎无法调用XmlDataDefinitions.xmlTagGroups.xmlLocationList.values().YYZ
或XmlDataDefinitions.xmlTagGroups.xmlLocationList.XmlTags.id
。代码完成&编译器似乎没有可见的XmlTags
由于某些原因,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;
}
}
}
问题是您的枚举是静态内部类,令人难以置信的是,枚举值在包含类中不可见 要修复此问题,您需要将枚举类条目静态导入到定义它们的vary类中,如下所示:
import static com.mycompany.mypackage.XmlDataDefinitions.XmlTags.*;
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)));
}
}
然后您就可以使用设备id
(例如),而无需XmlTags。
资格认证
疯狂,我知道,但就是这样。添加静态导入后,Eclipse将按预期编码完成它们
另一个修复方法是将枚举放入它们自己的类中,但与您一样,我通常更喜欢将我的
枚举到使用/拥有它们的类中(以避免类膨胀-在有意义的情况下)。在Windows XP/2000上,我见过编译类的路径大于个字符的情况。在本例中,对于路径超过此深度的静态内部类,我最终得到了“未找到类”错误。在处理复杂的XSD模式和生成的类时,这些问题非常常见
考虑使用较短的类名/包,并将源代码重新定位到更靠近目录结构根的位置。我不太确定我是否知道您想要实现什么。但也许你想写一些像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 static com.mycompany.mypackage.XmlDataDefinitions.XmlTags.*;
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)));
}
}
import java.util.*;
公共枚举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\u id、XmlTag.screen\u name、XmlTag.address\u字符串、XmlTag.lat\u坐标、,
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\u id,XmlTag.message,XmlTag.screen\u name),
xmlChatMessage(XmlTag.id,XmlTag.from_device_id,XmlTag.to_device_id,XmlTag.from_screen_name,
XmlTag.to_屏幕名称,XmlTag.message,XmlTag.date),
;
公共静态枚举XmlTag{
id、设备id、屏幕名称、标题、消息、纬度坐标、液化天然气坐标、地址字符串、所见位置、账户图片、,
从设备id到设备id,从屏幕名称到屏幕名称,日期,
}
公共分类数据集标签;
私有XmlTagGroup(XmlTag…标记){
this.tags=Collections.unmodifiableSortedSet(新树集(Arrays.asList(tags));
}
}
?您尝试过重新启动eclipse吗?有时候会搞砸,我只是这么做了,但没用。我应该如何访问XmlDataDefinitions.XmlTagGroups.xmlLocationList中的枚举值(代码完成)?
XmlTags
中的最后一个逗号只是键入错误吗?不,它是在枚举字段定义之后提供枚举构造函数的。@Kevin:请显示完整的代码。我怀疑这篇文章能否被编译。谢谢你的回复,但它仍然不起作用。您提到要将它们“导入到定义它们的vary类中”。该类已经为它们导入了:import com.AtClass.MessageMarker.XmlDataDefinitions.XmlTags;用上面的导入替换它没有帮助。我还尝试在将使用它们的类中导入它。我仍然无法调用XmlDataDefinitions.xmlTagGroups.xmlLocationList。并让它完成该枚举中定义的标记。静态导入肯定有效(我一直在使用它)。您是否勾选了Project>buildautomatically
?尝试强制构建并尝试关闭Eclipse并重新打开它。有时它只是“失去了情节”。一秒钟,那么我该如何访问它呢?例如,作为xmlTagGroups.xmlLocationsList.device_id?我尝试清理项目并重新启动eclipse。还是没有骰子。代码完成无法显示xmlTagGroups.xmlLocationList中枚举的任何内容。@Kevin:重要的部分是import语句中的“static”。