Java 有没有一种方法可以在点的末尾添加一个字符串而不用手动键入?

Java 有没有一种方法可以在点的末尾添加一个字符串而不用手动键入?,java,minecraft-forge,Java,Minecraft Forge,我想创建一个OreBase类,这样我就不会为每个新矿石创建一个新类,因为它们应该做完全相同的事情:1。存在,2。删除矿石名称下划线前的相应项目(ruby_ore->ruby)。要为ruby\u ore返回ruby,我需要返回ModItems.ruby,我可以从“ruby\u ore”中获取字符串“ruby”,但我不知道如何正确地将其添加到“ModItems”之后。这可能吗 如果不可能,是否可以将“ModItems.”和项目字符串(例如“RUBY”)放在单个字符串(例如“ModItems.RUBY

我想创建一个OreBase类,这样我就不会为每个新矿石创建一个新类,因为它们应该做完全相同的事情:1。存在,2。删除矿石名称下划线前的相应项目(ruby_ore->ruby)。要为ruby\u ore返回ruby,我需要返回ModItems.ruby,我可以从“ruby\u ore”中获取字符串“ruby”,但我不知道如何正确地将其添加到“ModItems”之后。这可能吗

如果不可能,是否可以将“ModItems.”和项目字符串(例如“RUBY”)放在单个字符串(例如“ModItems.RUBY”)中,并将该字符串作为代码运行

@Override
public Item getItemDropped(IBlockState state, Random rand, int fortune) {
     int a = ore_name.indexOf('_'); //ex. ore_name = ruby_ore
     String b = ore_name.substring(0,a); //ex. ruby
     String c = b.toUpperCase();//ex. RUBY
     return ModItems.b;//i want this to do ex. ModItems.RUBY
}

因此,如果矿石名称为ex.黑云母矿石,则函数应返回ModItems.黑云母,而对于焦辛烯矿石,则应返回ModItems.焦辛烯,等等。

至少有3种方法。你挑吧。

1。使
修改项
成为包含
项的枚举
对象:

inta=ore_name.indexOf(“"”);
字符串b=ore_name.substring(0,a);
字符串c=b.toUpperCase();
返回ModItems.valueOf(c.getItem();
优点:简单,如果添加了新项目,则无需更新地图
缺点:如果
修改项不存在,则引发异常

2。制作
地图
(首选):

返回oreMap.get(ore_name);
优点:简单、易于实施
缺点:您必须在每次添加项目时更新地图,
get
为未知项目返回null

3。反思:

inta=ore_name.indexOf(“"”);
字符串b=ore_name.substring(0,a);
字符串c=b.toUpperCase();
返回ModItems.class.getDeclaredField(c.get)(null);
优点:无需为每个新项目更新地图

缺点:杀伤力过大,抛出丑陋的检查异常,除非绝对必要,否则一般不赞成。

至少有3种方法可以做到这一点。你挑吧。

1。使
修改项
成为包含
项的枚举
对象:

inta=ore_name.indexOf(“"”);
字符串b=ore_name.substring(0,a);
字符串c=b.toUpperCase();
返回ModItems.valueOf(c.getItem();
优点:简单,如果添加了新项目,则无需更新地图
缺点:如果
修改项不存在,则引发异常

2。制作
地图
(首选):

返回oreMap.get(ore_name);
优点:简单、易于实施
缺点:您必须在每次添加项目时更新地图,
get
为未知项目返回null

3。反思:

inta=ore_name.indexOf(“"”);
字符串b=ore_name.substring(0,a);
字符串c=b.toUpperCase();
返回ModItems.class.getDeclaredField(c.get)(null);
优点:无需为每个新项目更新地图

缺点:杀伤力过大,抛出丑陋的检查异常,除非绝对必要,否则一般都不赞成。

那么您想基本上将字符串解析为变量名吗?我想一个预定义的地图可能会帮你完成任务。@Zigzagoon以前没有使用过地图,我明天会试试(现在很晚了),但谢谢你!如果你可以将ore_name设置为ruby_ore,为什么你不能简单地将“itemToDrop”之类的东西设置为ModItems.ruby?@kumesana嘿,你刚刚给了我一个好主意:在OreBase类中添加一个额外的参数,ore会删除这个东西!非常感谢。所以你想把字符串解析成变量名?我想一个预定义的地图可能会帮你完成任务。@Zigzagoon以前没有使用过地图,我明天会试试(现在很晚了),但谢谢你!如果你可以将ore_name设置为ruby_ore,为什么你不能简单地将“itemToDrop”之类的东西设置为ModItems.ruby?@kumesana嘿,你刚刚给了我一个好主意:在OreBase类中添加一个额外的参数,ore会删除这个东西!非常感谢。