1

我正在用一个名为 addCustomer 的静态方法在 Java 中创建一个类,它为我返回这个类的一个实例,如下所示:

import java.util.ArrayList;

public class Customer {
    private ArrayList<Double> transactions;
    private String name;
        
    public static Customer addCustomer(String name, Double transaction){
        this.name = name;
        return new Customer();
    }
}

它在 addCustomer 方法的第一行给了我一个错误

this.name = name;

因为我不能在静态方法中使用非静态变量,这对我来说完全有意义。但后来我尝试为同一个类创建一个私有构造函数(具有名称和事务值),并在我的 addCustomer 方法中使用它而不是 Customer()。像这样:

    private Customer(String name, Double transaction){
        this.name = name;
        transactions = new ArrayList<Double>();
        transactions.add(transaction);
    }
    
    public static Customer addCustomer(String name, Double transaction){
        return new Customer(name,transaction);
    }

由于静态方法 addCustomer(),我认为我必须在构造函数中放置静态修饰符,但我的 IDE 说它不允许在构造函数中。而且,这对我来说没有任何意义,我可以像这样使用 addCustomer() 方法(在构造函数中没有静态),那么即使它不是静态方法和里面的变量,为什么我仍然可以使用它不是很好吗?

4

1 回答 1

2

这就是我要做的:

import java.util.ArrayList;

public class Customer {
    private ArrayList<Double> transactions;
    private String name;

    public Customer(String name, Double transaction) {
        this.name = name;
    }
}

要获得Customer类型,您只需执行Customer customer = new Customer(<name>, <transaction>). 如果您希望能够Customer.addCustomer(<name>, <transaction>)像上图所示调用,您可以使用:

import java.util.ArrayList;

public class Customer {
    private ArrayList<Double> transactions;
    private String name;

    public Customer(String name, Double transaction) {
    this.name = name;
    }

    public static Customer addCustomer(String name, Double transaction) {
        return new Customer(name, transaction);
    }
}

构造方法需要与类同名(区分大小写)。它也必须是public ClassName,没有通常的返回值。

于 2020-12-29T01:09:30.237 回答