为什么我不能直接引用我的String枚举?

时间:2015-05-26 00:52:49

标签: java enums

我想我今天会尝试启动一个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。我看了一下注释的代码。它说它只接受一个字符串。

我没有包裹我的脑袋是我的枚举类不兼容。我在每个枚举中都返回一个字符串。

问题是什么?

1 个答案:

答案 0 :(得分:6)

From the source codeMod#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也不是常量表达式。