Есть ли способ добавить строку в конце точки, не вводя ее вручную? - PullRequest
0 голосов
/ 04 мая 2019

Я хочу создать класс OreBase , чтобы я не создавал новый класс для каждой новой руды, потому что они должны в значительной степени делать одно и то же: 1. существовать, 2. отбрасывать соответствующийпредмет, который назван перед подчеркиванием имени руды (ruby_ore -> ruby) .Чтобы вернуть ruby ​​для ruby_ore, мне нужно вернуть ModItems.RUBY , я могу получить строку "RUBY" из "ruby_ore" , но я неНе знаю, как правильно добавить его после "ModItems." .Возможно ли это?

Если это невозможно, возможно ли поставить "ModItems." и строку элемента ex. "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
}

Так что если имя ore_name - ex. biotite_ore функция должна вернуть ModItems.BIOTITE , для pyroxine_ore она должна вернуть ModItems.PYROXINE и т. Д.

1 Ответ

2 голосов
/ 04 мая 2019

Есть как минимум 3 способа сделать это.Выберите.

1.Сделайте ModItems Enum, содержащий Item объект:

     int a = ore_name.indexOf('_');
     String b = ore_name.substring(0,a);
     String c = b.toUpperCase();
     return ModItems.valueOf(c).getItem();

Плюсы: Простой, нет необходимости обновлять карту, если добавлен новый элемент
Минусы: Выдает исключение, если ModItem не существует

2.Создание Map<String, ModItem> (предпочтительно):

    return oreMap.get(ore_name);

Плюсы: Простота, простота реализации
Минусы: Вы должны обновить свойкарта каждый раз, когда вы добавляете предмет и get возвращает ноль для неизвестных руд

3.Отражение:

     int a = ore_name.indexOf('_');
     String b = ore_name.substring(0,a);
     String c = b.toUpperCase();
     return ModItems.class.getDeclaredField(c).get(null);

Плюсы: Нет необходимости обновлять карту для каждого нового элемента
Минусы: Избыток, выбрасывает некрасивые проверенные исключения,и, как правило, осуждается, если в этом нет крайней необходимости.

...