2

我想知道关于类初始化的最佳实践是什么,

我的意思是我应该Customer c = new Customer();在顶层初始化一个类,然后在类的任何地方使用它:

Tools tools = new Tools();
    public boolean doCIdCheck(int cId) {
        final Iterator<Customer> cursor = tools.Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }

或者我应该new Customer().checkCId();在需要的地方使用它:

    public boolean doCIdCheck(int cId) {
        final Iterator<Customer> cursor = new Tools().Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }

或者最好让每个函数/方法都有自己的类实例:

    public boolean doCIdCheck(int cId) {
        Tools tools = new Tools();
        final Iterator<Customer> cursor = tools.Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }
4

4 回答 4

1

从您的示例看来,最好的方法是声明 as 的共享方法和成员,Toolsstatic不是创建实例,然后将它们称为

final Iterator<Customer> cursor = Tools.Customers.iterator();

这当然假设您不存储Tools可能导致冲突的数据,在这种情况下,最好创建多个实例。

于 2012-09-04T08:21:45.167 回答
0

考虑到您在类的每个方法中都需要该 Object 并仅考虑内存管理和处理器消耗,然后:

1.选项1(保持全局变量随处可访问):如果您有大量这些对象,内存使用量将增加,因为您将为每个工具实例存储一个额外的客户对象。这将使您获得处理器速度,因为您不必为每种方法创建和销毁客户对象。

2.选项2:(保持客户对象只能在方法内访问):内存使用量将减少,您的应用程序将变得更加处理器密集,因为您将在每次访问方法时创建和销毁对象。

IMO,如果您实例化大量工具对象,则选择选项 2,否则如果只有少量工具对象,则选择选项 1

于 2012-09-04T08:39:28.180 回答
0

这取决于您的要求。例如,如果您不希望方法 doCIdCheck 之外的类工具,则首选第 3 个选项。

于 2012-09-04T07:56:14.253 回答
0

您可以覆盖equals()方法来检查 in 上的相等cidCustomer例子

然后你可以使用contains()Collection方法来代替那些循环

所以你的 doCIdCheck 方法看起来像

public boolean doCIdCheck(Customer cId) {
    Tools tools = new Tools();// I don't know if you are initializing list
                                // in Tools constructor or not but it should
                                // be initialized in constructor or in declaration
    return tools.customers.contains(cId);
}
于 2012-09-04T08:30:56.483 回答