我想我今天会尝试启动一个Minecraft mod。我打算使用枚举类来存储我的版本和modid之类的东西。
public enum Reference {
MODID("farming"),
VERSION("1.8.0-0.0.1");
private String value;
Reference(String string) {
String value = string;
}
@Override
public String toString() {
return value;
}
}
对toString
方法的覆盖是一个不起作用的想法。它仍然抱怨它想要一个字符串,但我返回Reference
这是一个不兼容的类型,因为它需要一个String
。
这是主要课程的其余部分。
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
@Mod(modid = Reference.MODID , version = Reference.VERSION)
public class FarmingMod
{
@EventHandler
public void init(FMLInitializationEvent event) {
}
}
我想弄清楚的部分是注释@Mod
。我看了一下注释的代码。它说它只接受一个字符串。
我没有包裹我的脑袋是我的枚举类不兼容。我在每个枚举中都返回一个字符串。
问题是什么?
答案 0 :(得分:6)
From the source code,Mod#modid
需要String
String modid();
但您提供的是Reference
@Mod(modid = Reference.MODID ...)
如果覆盖其String
方法,您似乎认为Java会隐式地将某些内容转换为toString
。它不会。
你将无法做到
modid = Reference.MODID.toString()
因为注释属性或多或少地期望常量表达式,并且方法调用不是常量表达式。您将无法使用enum
来解决此问题。您可以声明并使用static final
变量
// in some Constants class
public static final String MODID = "farming"; // constant variable/expression
和
@Mod(modid = Constants.MODID)
您也无法使用
@Mod(modid = Reference.MODID.value)
因为字段访问.value
也不是常量表达式。