我有一个枚举,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处理它。它既有效又有效。
感谢您的意见和建议!
答案 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());
}
}