如何通过Java Reflection使这个布尔语句成为false

时间:2016-04-21 08:27:41

标签: java reflection

我必须使用反射。

在我的ATM课程中,我有两个变量:

   private int userBalance = 100;
   private int moneyInMachine = 100000;

我想提取无限金额。

这是ATM的撤销功能:

private void widthdrawAmount(int n) {
    if (this.userBalance - n < 0 || this.moneyInMachine - n < 0) {
       // You can not pull money out.
    }

    this.updateScreen();
}

我想知道是否有人知道如何把这个布道声明弄错。

2 个答案:

答案 0 :(得分:3)

试试这个:

Field userBalance = myAtm.getClass().getDeclaredField("userBalance");
userBalance.setAccessible(true);
userBalance.set(myAtm, Integer.MAX_VALUE);

Field moneyInMachine = myAtm.getClass().getDeclaredField("moneyInMachine");
moneyInMachine.setAccessible(true);
moneyInMachine.set(myAtm, Integer.MAX_VALUE);

答案 1 :(得分:1)

您只能更改字段的值,而不能更改代码的语句。

此代码:

public static class ATM {
  private int userBalance = 100;
  private int moneyInMachine = 100000;
  public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
    ATM a = new ATM();
    Field balanceField = ATM.class.getDeclaredField("userBalance");
    balanceField.setAccessible(true);
    balanceField.set(a, 123456);
    System.out.println(a.userBalance);
  }
}

打印

123456

这意味着您可以使用反射更改偶数私有变量的值。