java.math.BigInteger не может быть приведен к java.lang.Integer - PullRequest
12 голосов
/ 01 марта 2012

Я получаю следующее исключение.

Причина:

java.lang.ClassCastException: java.math.BigInteger не может быть приведен к java.lang.Integer

со следующимикод

List queryResult = query.list();

for (Iterator<Object[]> it = queryResult.iterator(); it.hasNext();) {
    Object[] result = it.next();
    Integer childId = (Integer) result[0];
    Integer grandChildCount = (Integer) result[1];
    CompanyNode childNode = childNodes.get(childId);
    childNode.setHasChildren(grandChildCount != 0);
    childNode.setIsLeaf(grandChildCount == 0);
}

в этой строке

Integer grandChildCount = (Integer) result[1];

У кого-нибудь есть идеи?

Ответы [ 5 ]

36 голосов
/ 01 марта 2012

Вы можете использовать:

Integer grandChildCount = ((BigInteger) result[1]).intValue();

Или, возможно, приведен к Number для охвата значений Integer и BigInteger.

11 голосов
/ 01 марта 2012

Как мы видим из javaDoc, BigInteger не является подклассом Integer:

java.lang.Object                      java.lang.Object
   java.lang.Number                       java.lang.Number
      java.math.BigInteger                    java.lang.Integer

И это причина того, что кастинг от BigInteger до Integer невозможен.

Приведение java-примитивов будет выполнять некоторое преобразование (например, приведение от double к int), в то время как приведение типов никогда не преобразует классы.

4 голосов
/ 01 марта 2012

java.lang.Integer не суперкласс BigIntegerBigInteger, и Integer наследуются от java.lang.Number, так что вы можете привести к java.lang.Number.

См. Документы Java http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html

1 голос
/ 01 марта 2012

Столбец в базе данных, вероятно, DECIMAL.Вы должны обработать его как BigInteger, а не Integer, иначе вы теряете цифры.Или измените столбец на int.

0 голосов
/ 20 марта 2018

Вы можете попробовать это:

((BigDecimal) volume).intValue();

Я использую java.math.BigDecimal конвертировать в int (примитивный тип).

Это работает для меня.

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