Pergunta

Eu continuo achando tanto no aqui e Google povos que têm problemas que vão de long para int e não o contrário. No entanto, eu tenho certeza que não sou o único que tem executar para esse cenário antes de ir de int para Long.

A única outra resposta que eu encontrei foram "Basta configurá-lo como longo em primeiro lugar", que realmente não abordar a questão.

I inicialmente tentou lançar, mas eu recebo um "Cannot cast from int to Long"

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

Como você pode imaginar que estou um pouco perplexo, eu estou preso usando int desde algum conteúdo está chegando como um ArrayList ea entidade para a qual eu sou armazenar esta informação requer o número de seqüência como um longa.

Foi útil?

Solução

Note que há uma diferença entre um elenco de long e um elenco de Long. Se você lançar a long (um valor primitivo), então ele deve ser encaixotado automaticamente para um Long (o tipo de referência que embrulha-lo).

Você pode alternativamente usar new para criar uma instância de Long, inicializando-lo com o valor int.

Outras dicas

Use o seguinte: Long.valueOf(int); .

Se você já tem o int digitado como um inteiro que você pode fazer isso:

Integer y = 1;
long x = y.longValue();

uso

new Long(your_integer);

ou

Long.valueOf(your_integer);

Eu tenho este pequeno brinquedo, que também lida com interfaces não genéricos. Estou OK com ele jogando um ClassCastException se errada de alimentação (OK e feliz)

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}

Em Java você pode fazer:

 int myInt=4;
 Long myLong= new Long(myInt);

no seu caso seria:

content.setSequence(new Long(i));

Vamos obter o valor de longo usando referência Number.

public static long toLong(Number number){
    return number.longValue();
}

Ele funciona para todos os tipos de números, aqui está um teste:

public static void testToLong() throws Exception {
    assertEquals(0l, toLong(0));   // an int
    assertEquals(0l, toLong((short)0)); // a short
    assertEquals(0l, toLong(0l)); // a long
    assertEquals(0l, toLong((long) 0)); // another long
    assertEquals(0l, toLong(0.0f));  // a float
    assertEquals(0l, toLong(0.0));  // a double

}

Como Sobre

int myInt = 88;

// Será que não compilação

Long myLong = myInt;

// compila, e mantém o espírito não-NULL de int. A melhor elenco é nenhum o lançarei em tudo . Claro, seu caso de uso pode exigir longo e possíveis valores nulos. Mas se o int, ou outros longs são sua única entrada, e seu método podem ser modificados, gostaria de sugerir essa abordagem.

long myLong = myInt;

// compila, é a forma mais eficiente, e deixa claro que o valor de origem, é e nunca será NULL.

Long myLong = (long) myInt;
 1,new Long(intValue);
 2,Long.valueOf(intValue);

Eu tinha um grande problema com isso. Eu só queria:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

Onde IntervalCount é um longo, eo JSpinner foi definido para retornar um longo. Eventualmente, eu tinha que escrever esta função:

    public static final Long getLong(Object obj) throws IllegalArgumentException {
    Long rv;

    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
        rv = Long.parseLong(obj.toString());
    }
    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
        rv = (Long) obj;
    }
    else if(obj.getClass() == String.class) {
        rv = Long.parseLong(obj.toString());
    }
    else {
        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
    }

    return rv;
}

que parece fazer o truque. Nenhuma quantidade de simples casting, nenhuma das soluções acima funcionou para mim. Muito frustrante.

 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)

Assim que só há método Long.valueOf(long), elenco de int para long será feito implicitamente no caso de utilizar Long.valueOf(intValue).

A maneira mais clara de fazer isso é

Integer.valueOf(intValue).longValue()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top