Java объект для int: лучший способ?

У меня есть TreeSet, который будет полон целых чисел. Короче говоря, я пытаюсь начать цикл после последнего (наибольшего) значения, сохраненного в списке. Что я делаю сейчас, чтобы получить начальную переменную:

    Object lastObj = primes.last();
    Integer last = new Integer(lastObj.toString());
    int start = 1 + last.intValue(); // the added 1 is just for program logic

Я уверен, что должен быть лучший способ привести объект (который, я знаю, всегда будет int) в int 'start'. Кто-нибудь знает лучший способ сделать это?

6 ответов

Решение

Вы используете Java версии 1.6? В этом случае вы можете воспользоваться преимуществами автобокса и обобщений для очистки кода.

Во-первых, TreeSet может быть объявлен как содержащий только объекты Integer

TreeSet<Integer> primes;

Теперь, чтобы получить объект из набора вы можете

Integer last = primes.last();

и с помощью функции автобокс вы получаете

int start = 1 + last;

В J2SE 5 или более поздней версии это происходит автоматически, с функцией "автобокс".

int start = 1 + last;

http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

Кроме того, если вы знаете, что все они будут объектами Integer, используйте параметризованный тип:

List<Integer> obj = new ArrayList<Integer>()...

Затем объедините его с функцией автобокса:

int start = 1 + obj.last();

Если вы знаете, что они были 'int', когда они были вставлены, то они были преобразованы в Integer, пока в Коллекции (Коллекции не могут содержать примитивы, только объекты), как таковые, вы можете просто Integer last = (Integer)lastObj;,

Хотя в идеале вы бы использовали TreeSet<Integer> и тогда это будет просто кормить вас целыми числами в первую очередь.

Если вы знаете primes держит только целые числа, вы должны сделать primes в TreeSet<Integer>,

Тогда бы стало:

int start = 1 + primes.last().intValue();

Если вы не можете использовать дженерики, используйте это:

int start = 1 + ((Integer)prime.last()).intValue();

Бросать в строку просто глупо.

Кстати, я не предлагаю использовать автобокс. Он делает все за спиной. Явное использование Integer кажется мне понятнее. Но это только мое личное предпочтение, вы можете использовать автобокс, если хотите.

Post Java 1.4, вы можете использовать автобокс.

Так и становится,

int start = 1 + (Integer) primes.last(); // the added 1 is just for program logic

Если вы использовали дженерики с вашим TreeSet (TreeSet<Integer>) вы можете удалить начальное приведение к Integer.

Почему вы не можете просто привести его, вместо того, чтобы преобразовать строку, затем проанализировать эту строку и создать новую ссылку?

Object lastObj = primes.last();
int start = 1 + ( ( Integer )lastObj ).intValue();
Другие вопросы по тегам