如何防止对象在布尔方法中写入



我正在尝试执行以下操作:

写一个布尔方法,将帐户添加到模式。

a。它应该有一个用于费率的参数,一个帐户类型。

b。如果他们还没有一个帐户,则该帐户将成为赞助人的第一个帐户,或者第二个帐户。

c。如果他们已经有两个帐户,方法返回false,否则返回true。

这是代码:

public class Assignment6 {
    public static void main(String[] args) {
        System.out.println(BankPatron.addAccount(11,AccountType.CD));
        System.out.println(BankPatron.addAccount(12,AccountType.CD));
        System.out.println(BankPatron.addAccount(13,AccountType.CD));
    }
}
class BankPatron {
    public static BankAccount account1;
    public static BankAccount account2;
    public static Boolean addAccount(double rate, AccountType type) {
        if (account1 == null) {
            BankAccount account1 = new BankAccount("","",rate,type);
            System.out.println(account1.getRate());
            return true;
        }
        else if (account2 == null) {
            BankAccount account2 = new BankAccount("","",rate,type);
            System.out.println(account2.getRate());
            return true;
        }
        else {
            return false;
        }
    }
}

此返回:

11.0
true
12.0
true
13.0
true

因此,这意味着帐户1对象被写了三遍,对吗?在AddAccount完成后,我该如何获得account1的保存,因此,一旦AddAccount再次运行,它将看到Account1不再是null?

if -block中的本地变量正在遮蔽静态字段。

而不是:

if (account1 == null) {
    BankAccount account1 = new BankAccount("", "", rate, type);
    // ...
}

应该是:

if (account1 == null) {
    account1 = new BankAccount("", "", rate, type);
    // ...
}

很可能,您还需要重构BankPatron不使用static字段/方法,而是实例字段/方法。

这将允许您写作:

BankPatron bankPatron = new BankPatron();
bankPatron.addAccount(11, AccountType.CD);
// ...

避免在条件中内部重新保证帐户1和account2。

if (account1 == null) {
            BankAccount account1 = new BankAccount("","",rate,type);
....
else if (account2 == null) {
        BankAccount account2 = new BankAccount("","",rate,type);

这应该是:

if (account1 == null) {
                account1 = new BankAccount("","",rate,type);
.....
else if (account2 == null) {
        account2 = new BankAccount("","",rate,type);

,如果您的程序是多线程的,则通过执行以下操作使此方法同步:

public synchronized static Boolean addAccount(double rate, AccountType type) { 

检查帐户1是null之后,您将创建新的bankAccount对象并将其分配给本地变量account1,而不是'account1'字段。查看您的代码中的这一行

 BankAccount account1 = new BankAccount("","",rate,type);

此account1变量的范围将在if块内。因此,您的分配将发生在本地的" account1"对象而不是静态字段'account1'

只需用以下方式替换此代码线:

account1 = new BankAccount("","",rate,type);

还对else 2中的Account2进行类似的更改。您将获得所需的结果

11.0
true
12.0
true
false

相关内容

  • 没有找到相关文章