【问题标题】:How to keep someone from inputting a certain value on a java method?如何防止某人在java方法上输入某个值?
【发布时间】:2019-01-15 02:28:23
【问题描述】:

我有这个方法:

public static int getSlotFromRow(int row, int slot)

把这想象成从某个数据表中的一行中获取槽。

每行有 9 个插槽,最大行数为 6。我希望此方法返回一个整数,告诉我插槽(例如,如果我想要第 4 行的第 3 个插槽,该方法将返回 30)。

但是当他们使用该方法时,我如何防止有人在行变量上输入大于 6 的整数和在槽变量上输入大于 9 的整数?

【问题讨论】:

  • 您只需在将值传递给您的方法之前对其进行验证...
  • 您的方法也很混乱,因为您向方法发送了一个插槽#,但要求返回一个不同的插槽#?
  • 使用该方法的客户端代码是什么样的?调用是否来自用户界面?

标签: java methods integer


【解决方案1】:

您有几个选择。最广泛使用的是在方法本身内验证传递给方法的值:

    public static int getSlotFromRow(int row, int slot) throws IllegalArgumentException {
        // Verify the values are valid
        if (row < 1 || row > 6) {
            throw new IllegalArgumentException("Invalid row selected!");
        }
        if (slot < 1 || slot > 9) {
            throw new IllegalArgumentException("Invalid slot selected!");
        }

        return 30; // Or whatever calculation you do to come up with 30
    }

您也可以在调用方法之前进行验证。

【讨论】:

    【解决方案2】:

    使用throw 抛出Exception。在这种特殊情况下,IllegalArgumentException 似乎是合适的,因为调用者提供了一个违反方法前提条件的参数:

    public void getSlotFromRow(int row, int slot) {
        if(row>6){
            throw new IllegalArgumentException("value of argument 'row' too large");
        }
        if(slot>9){
           throw new IllegalArgumentException("value of argument 'slot' too large");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-07-08
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多