Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 帮助eclipse查找我的枚举值?_Java_Eclipse_Enums - Fatal编程技术网

Java 帮助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(枚举值)。理

在使用代码完成时,我很难让Eclipse注意到枚举值。
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”。