2012-01-18 2 views
2

Список может содержать как целые, так и строковые значения. В этом случае, должен ли я создать список объектов, правильно?Список объектов. Операции с целыми записями

List<Object> list = new ArrayList<Object>(); 

Как выполнить простые арифметические операции с целыми элементами списка?

list.add(1); 
list.add("ok"); 
list.add(2); 
Integer a = list.get(0) - list.get(2); // does not work 
+2

Почему у вас нет двух списков: один для ints, другой для строк? –

+0

Мне нравится ваше мышление, кажется естественным попробовать это. Идет прямо к моему списку того, что не так с автоматическим боксом в Java. – x4u

+0

@Victor Sorokin: Это было бы хорошим решением, если бы у меня были только String и Integer. На самом деле может быть больше типов. Поэтому мне нужно поддерживать высокий уровень генериков в коде. –

ответ

5

Вы должны отливать Object S в целое, потому что - оператор не определен на Object с и Java не распаковывать их автоматически.

Integer a = ((Integer)list.get(0)) - ((Integer)list.get(2)); 
+0

Эй, похоже, что я сделал нижний нисходящий твой пост, а не вверх. Не могли бы вы сделать небольшое редактирование, чтобы я мог его отменить? –

+0

@Milad Naseri Я ценю вашу честность :-) Там вы идете. Благодаря! – Matten

+0

Готово. Извините за беспокойство. Я просто был невнимателен :) –

5

Это потому, что в конечном счете, list.get(0); является Object. Вы должны бросить его, если вы хотите сделать арифметические операции над ним:

Integer a = (Integer) list.get(0) - (Integer) list.get(2); 
1

Это очень плохой дизайн, чтобы быть честным. Что делать, если вы хотите перебрать этот список? Вам придется вручную проверить, является ли элемент строкой или целым числом. Дженерики, которые были введены в Java по какой-то причине.

Можете ли вы сделать 2 списка: один для строк и один для целых чисел. Или, по крайней мере, использовать один список, но вместо использования строк используется (обычно неиспользуемое) целочисленное значение?

+0

Нет. К сожалению, я не могу этого сделать. Я читаю данные из БД, и по некоторым конкретным причинам мне нужно сохранить эти данные в одном списке. –

+0

Я понимаю, что могут быть некоторые особенности, о которых мы не знаем. Тем не менее я бы рекомендовал вам хотя бы попробовать и реорганизовать этот кусок системы. В противном случае это будет бомба замедленного действия, которая будет только увеличивать технический долг с каждым днем. –

Смежные вопросы