【问题标题】:Efficiently Looping through Object array with Multiple Variable types in Java在 Java 中有效地循环遍历具有多个变量类型的对象数组
【发布时间】:2019-06-06 15:26:15
【问题描述】:

我正在用 Java 编写一个简单的脚本,它正在调用另一个保存我所有信息的类。

我将我的信息保存在 Object[] Arrays 中的被调用类中,并且我计划调用脚本来获取该数组。

现在函数看起来像这样。

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 循环。

有没有人有更优雅的解决方案来从这个数组中获取变量?

【问题讨论】:

    标签: java arrays object for-loop variables


    【解决方案1】:

    我认为与其将所有信息存储在 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();
    ...
    

    【讨论】:

    • 我对自己没有想到这一点感到愤怒!非常感谢您提供如此简单的解决方案
    • @Fuzzyketchup 没问题 :) 我们都做了同样的事情
    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多