Я пытаюсь сделать простой пример пользовательской и банковской программы, где вы должны гарантировать, что деньги не могут быть обмануты кем-то, кто может добавлять, наследовать, реализовывать существующие существующие классы, но не может редактировать исходные. Поэтому я спрашиваю, можете ли вы как-то установить баланс чьего-либо счета без предоставленной функции для перевода денег.
Я пытался использовать рефлексию, но вам нужно иметь публичные конструкторы, чтобы создать объект, для которого вы вызываете частные методы, нопоскольку все конфиденциально, я не могу назвать это.
public class Bank {
private static Bank ourInstance = new Bank();
public static Bank getInstance() {
return ourInstance;
}
private Bank() {}
public boolean requestTransfer(User user1, User user2, double amount) {
BankAccount ba1 = (BankAccount) user1.getBankAccount();
BankAccount ba2 = (BankAccount) user2.getBankAccount();
if (!(hasAccount(ba1) && hasAccount(ba2)))
return false;
if (ba1.getBalance() >= amount)
{
ba1.setBalance(ba1.getBalance() - amount);
ba2.setBalance(ba2.getBalance() + amount);
return true;
}
return false;
}
private class BankAccount implements BankAccountInterface {
private double balance;
private User user;
private BankAccount(double balance) {
this.balance = balance;
}
@Override
public double getBalance() {
return balance;
}
@Override
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
private void setBalance(double balance) {
this.balance = balance;
}
}
}
public interface BankAccountInterface {
double getBalance();
User getUser();
}
public class User {
private String username;
private String password;
private Date created_at;
private BankAccountInterface bankAccount;
//constructor getters and setters etc..
}
Если вы можете добавить свои собственные классы, наследовать текущие, использовать рефлексию или что-либо в вашем распоряжении, вы можете незаконно дать деньги пользователю.