Как написать статический класс, который имеет идентификатор со строкой в ​​нем - PullRequest
1 голос
/ 17 февраля 2010

Я хочу написать идентификатор клиента статического класса, который начинается с C1000, и для каждого нового созданного объекта клиента он добавляет +1, C1001, C1002, C1003 и т. Д. Как это сделать, если есть строка?

public class Customer
{
    private static int customerID = 1000;

    public Customer()
    {
        customerID++;
    }

    public static int getcutomerID()
    {
        return customerID;
    }
}

Ответы [ 3 ]

6 голосов
/ 17 февраля 2010
public class Customer {
    private static int NextCustomerId = 1000;
    private final int myCustomerId;

    public Customer() {
        myCustomerId = NextCustomerId++;
        ...
    }

    public String getCustomerId() {
        return "C" + myCustomerId;
    }
}

Обратите внимание, что это, вероятно, не потокобезопасно. Если вам нужно, посмотрите на java.util.concurrent.atomic.AtomicInteger и используйте один из них для NextCustomerId.

3 голосов
/ 17 февраля 2010
public class Customer {
    private static int customerID = 1000;

    // wth would you do this?! static state is evil!
    public Customer() { customerID++; }

    public String getCurrentCustomerID() { return "C" + customerID; }
}

Статическое состояние очень плохо для тестирования. Это составляет глобальные переменные. Возможно, лучший дизайн:

public class Customer {
    private final int id;
    public Customer(final int id) { this.id = id; }
    public int getId() { return id; }
}

public class CustomerDatabase {
    private int nextId;

    public CustomerDatabase() { this(0); }
    public CustomerDatabase(int nextId) { this.nextId = nextId; }

    public synchronized int nextId() { return nextId++; }

    // define useful operations for a CustomerDatabase
}

// maybe you could use the database and customer classes as follows
public class CustomerApplication {
    public static void main(String[] args) {
        // first argument is highest customer id
        CustomerDatabase db = new CustomerDatabase(Integer.parseInt(args[0]));

        Customer c = new Customer(db.nextId());
        db.add(c);

        System.out.println(db.getCustomers());

        db.save("customers.txt");

        Customer x = db.findById(13);
        if(x.isBroke()) db.delete(x);

        System.out.println("K thx, bai");
    }
}
1 голос
/ 17 февраля 2010

Не делай этого. Используйте int с String.format().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...