[英]How can I store different classes in an enum?
我有一个枚举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); 这就是我所说的枚举:
前缀前缀= EnumUtil.PREFIX_UTIL; 这是我收到的错误:
不兼容的类型:EnumUtil无法转换为前缀
编辑:
我将通过让Util处理它回到旧方法。 它既有效又有效。
感谢您的意见和建议!
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();
就像其他人一样
它应该工作。 this.classfile引用枚举中提供的类文件。 因此EnumUtil.CHAT_UTIL.get()将返回“我的chatutil类文件”。 但是,get()始终会返回Class对象,这对我来说似乎毫无意义。
我想你想要这样的东西。
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());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.