Возвращает уникальный int - PullRequest
0 голосов
/ 09 июля 2019

Мне нужно вернуть уникальный уникальный номер SKU для этого элемента

public class SKU { 
    private static int pkey_next = 123018;
    public int getSKU() { // Returns the int unique SKU number for this item
        return pkey_next++;
    }
}

Класс SKU должен иметь private static int pkey_next = 123018;, который будет определять начальный идентификационный номер «первичного ключа» для товаров, которые мы имеем в нашем магазине. Поскольку он начинается в 123018, я должен получить System.out.println(three.getSKU()); // 123020.

Я получаю 123018 прямо сейчас.

Ответы [ 4 ]

2 голосов
/ 09 июля 2019

Я думаю, вы пытаетесь достичь атомарности, получая при этом уникальную ценность. Если да, то вы можете попробовать что-то вроде следующего

public class SKU {

    private static final AtomicInteger PKEY_NEXT = new AtomicInteger(123018);

    public int getSKU() { // Returns the int unique SKU number for this item
        //as you want increment of 2 so passing 2
        return PKEY_NEXT.addAndGet(2);
    }
}
1 голос
/ 09 июля 2019

Полагаю, это то, о чем вас просят:

public class SKU { 
    private static int pkey_next = 123018;
    private int pkey;

    public SKU() {
        this.pkey = pkey_next++;
    }

    public int getSKU() { // Returns the int unique SKU number for this item
        return this.pkey;
    }
}

То есть фактически присваивают каждому экземпляру свое уникальное значение pkey, используя статическое поле в качестве счетчика.

SKU one = new SKU();
SKU two = new SKU();
SKU three = new SKU();
System.out.println(three.getSKU()); // 123020
1 голос
/ 09 июля 2019

Определите приведенный ниже класс

public static class SKU {
    private static int pkey_next = 123018;

    public static int getSKU() {
        return ++pkey_next;
    }
}

и используйте следующую оценку для выбора метода

SKU.getSKU()

Вваш случай:

System.out.println(SKU.getSKU());
0 голосов
/ 09 июля 2019

Вы делаете пост-приращение, поэтому получаете то же значение. Вы должны сделать предварительное увеличение здесь, то есть увеличение перед возвратом. просто измените return pkey_next++; на ++pkey_next;

...