如何正确使用enum java / android

时间:2014-02-13 14:38:51

标签: java android enums

我之前从未使用过枚举。所以请耐心等待我一点。

应用背景:

我创建了一个应用程序,用户可以从外部存储USB设备中添加三种类型的来源*music* *video**pictures*
用户在usd驱动器上选择一个文件夹并将其添加到源,然后为其添加一个类别。

THIS HAS BEEN DONE

问题是

现在我正在尝试从文件夹中读取具有特定扩展名的所有文件,如类别所定义。

以下是将存储在xml文件中的三个类别的扩展

<?xml version="1.0" encoding="UTF-8"?>

<Picture>
    <ext>jpg</ext>
    <ext>png</ext>
    <ext>gif</ext>
    <ext>jpeg</ext>
    <ext>pdf</ext>
    <ext>pcd</ext>
    <ext>jpx</ext>
    <ext>tif</ext>
</Picture>

<Videos>
    <ext>mpeg</ext>
    <ext>mpg</ext>
    <ext>mpe</ext>
    <ext>mpeg-1</ext>
    <ext>mpeg-2</ext>
    <ext>mp4</ext>
    <ext>mpa</ext>
    <ext>wmv</ext>
    <ext>wma</ext>
    <ext>wmx</ext>
    <ext>rm</ext>
    <ext>ra</ext>
    <ext>3gp</ext>
</Videos>

<Music>
    <ext>mp3</ext>
    <ext>wav</ext>
    <ext>dct</ext>
    <ext>gsm</ext>
    <ext>flac</ext>
    <ext>au</ext>
    <ext>ogg</ext>
    <ext>raw</ext>
    <ext>wma</ext>
    <ext>msv</ext>
</Music>

因此,例如,如果用户选择了视频类别,我将读取所有在xml中具有与视频类似扩展名的文件

我的Qustion是:

我试图通过使用ENUM来做这件事,我知道我也可以用简单的if / else语句来做,但我需要知道ENUM将如何工作。

我创建了一个定义了类别的媒体源枚举 这是代码:

public enum Media_source {

    Pitures("P"), Videos("V"), Music("M");

    private String statusCode;

    private Media_source(String s) {
        statusCode = s;
    }

    public String get_media_source() {
        return statusCode;
    }

}

然后我有一个Source类来检查选择了哪个类别。

public class Source {

        public static String source_path;
        public static String source_name;
        Media_source mSource;

        public static void main(String[] args) {

            System.out.println(Media_source.Pitures.get_media_source());

        }


        public Source(String name, String path) {
            Source.source_name = name;
            Source.source_path = path;
        }
        public static String getSource_path() {
            return source_path;
        }
        public static void setSource_path(String source_path) {
            Source.source_path = source_path;
        }
        public static String getSource_name() {
            return source_name;
        }
        public static void setSource_name(String source_name) {
            Source.source_name = source_name;
        }

}

现在我如何实际选择所有具有所选类别扩展名的文件?
我该如何使用枚举?

我不是要求代码,虽然任何帮助材料都会受到赞赏 - 我只需要明确这个概念。

谢谢

3 个答案:

答案 0 :(得分:2)

这是一个很棒的讲座:Google I/O 2008 lecture (Effective Java Reloaded)
Enum部分位于here左右 由于视频的质量很差,这里是slideshttps://sites.google.com/site/io/effective-java-reloaded

答案 1 :(得分:1)

您可能希望在代码中的某处创建EnumMap,其中Media_source为关键字,Set<String>个扩展名为值。然后,您可以使用该映射来检索媒体类型的适当扩展名

答案 2 :(得分:1)

然后我有一个Source类来检查选择了哪个类别。” - 我没有看到任何代码检查Enum的类型。

这就是我使用Enums的方式,你可以做类似的事情。

声明你的枚举:

public enum Media {
    IMAGE, VIDEO, AUDIO;
}

创建一个以enum作为参数的方法:

public selectStuff(Media m) {

    switch(m) {

        case IMAGE:
            //Do image stuff
            break;

        case VIDEO:
            //Do video stuff
            break;

        case AUDIO:
            //Do audio stuff
            break;

        default:
            break;

    }
}

这就是你如何使用它:

selectMedia(Media.IMAGE);

Oracle Docs中有一个类似的例子。