gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:55:37 24 4
gpt4 key购买 nike

我想今天我应该尝试启动一个《我的世界》模组。我打算使用枚举类来存储我的版本和 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。我看了一下注释的代码。它说它只接受单个字符串。

我没有想到的是我的枚举类不兼容。我在每个枚举中返回一个字符串。

问题可能是什么?

最佳答案

From the source code , Mod#modid 需要一个 String

String modid();

但您提供了引用

@Mod(modid = Reference.MODID ...) 

您似乎认为,如果您重写 Java 的 toString 方法,Java 会隐式地将某些内容转换为 String 。不会的。

你将无法做到

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也不是常量表达式。

关于java - 为什么我不能直接引用我的 String 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com