我正在尝试在BankAccount
类中编写一种方法,该方法仅使用两个参数从类型为User
的“用户”字段中取款(该类包含一个String username
,String password
和ArrayList<String> usernames
)和类型为double的“ amount”字段。
BankAccount
类具有用户类型的accountOwner
字段和类型availableFunds
的{{1}}字段。我试图找出如何通过类型为double
的用户参数来查找/访问BankAccount
类的实例。
我是Java的新手,我不理解如何仅通过用户类型变量来调用“ BankAccount”的实例。
我尝试创建一个新的User
实例,但是我不想这样做,因为我试图访问BankAccount
的现有实例。
以下是User类的相关方法和字段:
BankAccount
BankAccount类:
public class User {
static ArrayList<String> usernames = new ArrayList<String>();
private String username;
private String password;
public String getUsername()
{
return username;
}
这是我必须尝试编写的方法:
public class BankAccount {
private User accountOwner;
private double availableFunds;
public double getFunds()
{
return availableFunds;
}
public void deposit(double deposit)
{
availableFunds += deposit;
}
基本上,用户输入了User用户并提取了两倍的提款额,我必须从以某种方式使用User用户引用的BankAccount类中扣除提款额。
答案 0 :(得分:2)
那么您需要将您传递的用户映射到银行帐户。为此,可以使用用户名作为映射键,例如像这样:
Map<String, User> usersByName = new Hashmap<>();
Map<String, BankAccount> accountsByUsername = new Hashmap<>();
然后您填写地图,例如像这样:
BankAccount account = ...//you got it from somewhere
accountsByUsername.put( account.getUser().getUsername(), account);
提现时,您会通过用户名获得帐户:
BankAccount account = accountsByUsername.get(user.getUsername());
或者,您可以直接使用User
作为地图键,即Map<User, BankAccount>
,但是您必须满足一些要求:
equals()
实施hashCode()
和User
,可能仅使用username
属性User
的所有属性设为不可变-不应 更改地图键修改:
在评论中回答您的问题,以下三种方法可以解决如果您只有用户名但只有Map<User, BankAccount>
或只有Collection<BankAccount>
的情况下如何获得帐户的机会:
如果您拥有Map<User, BankAccount>
,则可以先查找用户,即
User user = usersByName.get(username); BankAccount account = accountsByUser.get(user);
或者,您只能在username
(和User.equals()
)中使用User.hashCode()
并创建一个仅用于查找的新User
实例:
{ {1}}
如果您只有BankAccount account = accountsByUser.get(new User(username));
,则可以遍历所有帐户并查找与所有者的用户名匹配的帐户。使用流可能看起来像这样:
Collection<BankAccount>
答案 1 :(得分:1)
通过真实的银行帐户查看将其可视化,
1)您创建一个用户,(通过提交文档来验证您的kyc) 2)创建一个银行帐户,并且打开该帐户的用户之一成为所有者 3)您将资金存入银行帐户,取出...等
因此,现在应该从哪个提款操作中提取资金,并由哪个用户提取。
现在,提现方法应验证用户是否是帐户的正确所有者
//Create banaccount and user objects seperately
public void withdraw(BankAccount banAcc , User user, double withdrawal) throws UserException, FundsException
{
if(!bankAcc.getUser()==user) {
throw new AuthenticationException("User is not authorised to withdraw funds");
}
if(bankAcc.getAvailableFunds < withdrawal) {
throw new FundsException("Insufficient funds");
}
bankAcc.setAvailableFunds(bankAcc.getAvailableFunds-withdrawal);
}