2016-04-21 74 views
0

我必須使用反射。如何通過Java反射使此布爾語句爲false

在我的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(); 
} 

我不知道是否有人知道的方式來利用這個boolea說法錯誤的。

+0

你不能使用反射來做這件事,因爲這是編譯代碼。使用反射只能調用方法,更改字段值等,但不能更改代碼本身。這裏使用反射的唯一方法是將'userBalance'和'moneyInMachine'改爲至少等於'n'。 – Thomas

回答

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); 
+0

哇,有人會變得富有,哈哈。 – user6212007

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

這意味着,你可以改變使用反射甚至私有變量的值。