Эффективный цикл по массиву объектов с несколькими типами переменных в Java - PullRequest
0 голосов
/ 06 июня 2019

Я пишу простой скрипт на Java, который вызывает другой класс, содержащий всю мою информацию.

Я храню информацию в вызываемом классе в массивах Object [] и планирую вызвать скрипт для извлечения этого массива.

Прямо сейчас функция выглядит следующим образом.

public void tradeShop() {

    /*
     *Variables must be initialized in order to call shopTrader
     *The values are just non-null placeholders and they are 
     *replaced with the same values in the tradeValues Object array.
     */
    String targetName = "NPC Name";
    String itemName = "Item Name";
    int itemQuantity = 1;
    int minCoins = 1;
    int minBuy = 1;
    boolean stackable = false;

    Object[] tradeValues = shop.defaultValues;

    for (int i = 0; i < tradeValues.length; i++) {
        if(String.class.isInstance(tradeValues[i])) {//String check
            if(i==0) { //0 is NPC Name
                targetName = (String) tradeValues[i];
            } else if (i==1) { //1 is Item Name
                itemName = (String) tradeValues[i];
            }
        } else if (Integer.class.isInstance(tradeValues[i])) { //Int check
            if(i==2) { //2 is Item Quantity
                itemQuantity = (Integer) tradeValues[i];
            } else if (i==3) { //3 is Minimum coins
                minCoins = (Integer) tradeValues[i];
            } else if (i==4) { //4 is the Minimum Buy limit
                minBuy = (Integer) tradeValues[i];
            }
        } else if (Boolean.class.isInstance(tradeValues[i])) { //Bool check
                stackable = (Boolean) tradeValues[i]; //5 is the item Stackable 
        } else {
            //TODO: Implement exception
        }
    }

    //Calls ShopTrader() method shopTrader
    ShopTrader trade = new ShopTrader();
    trade.shopTrader(targetName, itemName, itemQuantity, minCoins, minBuy, worldHop, stackable);
}

Мне кажется, что использование цикла for, как это, не является правильным способом для меня проходить по этим объектам, мне не нужно проверять i == для каждой переменной.

Также это мешает мне добавлять перегрузки в метод shopTrader, так как мне пришлось бы писать совершенно новый цикл for для каждой перегрузки.

У кого-нибудь есть более элегантное решение для получения переменных из этого массива?

1 Ответ

1 голос
/ 06 июня 2019

Я думаю, что вместо хранения всей вашей информации в Object [] вы можете создать новый класс, который будет действовать как структура данных, т.е.

public class TradeValue {
    String targetName;
    int itemQuantity;
    // etc.

    String getTargetName() {
        return targetName;
    }

    String getItemQuantity() {
        return itemQuantity;
    }
    // etc
}

Вы можете просто получить доступ к информации напрямую

TradeValue defaultValues = shop.defaultValues;
String targetName = defaultValues.getTargetName();
int itemQuantity = defaultValues. getItemQuantity();
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...