如何在枚举中存储不同的类?

时间:2014-01-30 22:14:04

标签: java enums

我有一个枚举,EnumUtil和一些类,ChatUtil,PrefixUtil等。 ChatUtil和PrefixUtil类扩展了Util类。我需要的是一种将每个内容存储在枚举中的方法。

示例:

我有一个需要前缀的类,所以我调用Enumutil.PREFIX_UTIL,它会返回PrefixUtil类。

这是我的代码,我觉得无效:

public enum EnumUtil
{
    CHAT_UTIL(My ChatUtil classfile),
    PREFIX_UTIL(My PrefixUtil classfile);

    private final Class<? extends Util> classFile;
    private EnumUtil(Class<? extends Util> file)
    {
        this.classFile = file;
    }

    public Class get()
    {
        return this.classFile;
    }
}

我确信这不起作用,因为它总是返回EnumUtil。另外,我需要提一下我不知道如何正确使用枚举。我看了很多教程,但是我没有找到任何这类问题。

这是实际的代码,我所做的就是用My ChatUtil类替换“ChatUtil.class”(没有实际引用)。

所以看起来如下:

CHAT_UTIL(ChatUtil.class), PREFIX_UTIL(Prefixes.class); 以下是我称之为枚举的方式:

前缀prefix = EnumUtil.PREFIX_UTIL; 这是我收到的错误:

不兼容的类型:EnumUtil无法转换为前缀

编辑:

我将回到过去的方式,让Util处理它。它既有效又有效。

感谢您的意见和建议!

3 个答案:

答案 0 :(得分:1)

Prefixes prefix = EnumUtil.PREFIX_UTIL;

应该是

Prefixes prefix = EnumUtil.PREFIX_UTIL.get().newInstance();

但这完全没有意义。你已经在调用站点编码了类名,这就是你所说的你想要避免的。你可以把newInstance()放在get()方法中,但是它会返回什么?它必须返回Object,所以你必须写

Prefixes prefixes = (Prefixes)EnumUtil.PREFIX_UTIL.get();

越来越糟,在调用网站上,类名称编码为两次。你也可以写

Prefixes prefixes = Prefixes.class.newInstance();

或确实

Prefixes prefixes = new Prefixes();

就像其他人一样。

答案 1 :(得分:0)

它应该工作。 this.classfile引用枚举中提供的类文件。所以EnumUtil.CHAT_UTIL.get()会返回'我的chatutil类文件'。但是,get()总会返回一个Class对象,这对我来说似乎毫无意义..

答案 2 :(得分:0)

我想你想要这样的东西。

public enum EnumUtil {
    CHAT_UTIL(ChatUtil.class),
    PREFIX_UTIL(PrefixUtil.class);

    private Class<? extends Util> clazz;
    private EnumUtil(Class<? extends Util> clazz){
        this.clazz = clazz;
    }
    public Class<? extends Util> getClazz() {
        return clazz;
    }
    public Util getUtil() throws InstantiationException, IllegalAccessException {
        return clazz.newInstance();
    }

}

public class Util {

}

public class ChatUtil extends Util {

    @Override
    public String toString() {
        return "ChatUtil [getClass()=" + getClass() + "]";
    }

}

public class PrefixUtil extends Util {

    @Override
    public String toString() {
        return "PrefixUtil [getClass()=" + getClass() + "]";
    }

}

public class Test {

    /**
     * @param args
     * @throws IllegalAccessException 
     * @throws InstantiationException 
     */
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        System.out.println(EnumUtil.CHAT_UTIL);
        System.out.println(EnumUtil.PREFIX_UTIL);
        System.out.println(EnumUtil.CHAT_UTIL.getUtil());
        System.out.println(EnumUtil.PREFIX_UTIL.getUtil());
    }

}