Dúvida em autoboxing simples  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
TiagoTC
JavaTeenager

Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline

Fiquei com uma dúvida agora no seguinte autoboxing:


Por que isso funciona normalmente? O que eu achava que acontecia era o seguinte:

1) 5 é um literal do tipo int (pois foi escrito diretamente no código fonte).
2) Assim, como Short é um tipo não primitivo, é necessário fazer o autoboxing do 5.
3) 5 é transformado em um objeto do tipo Integer.
4) Integer não é subclasse de Short, logo gera erro de compilação.

Qual o erro no racioncínio?

Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares
vmsb11
Java Ninja

Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline

o código funciona normalmente porq 5 está nos limites permitidos no tipo short....
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Lendo a JLS, no capítulo "Conversions" (http://java.sun.com/docs/books/jls/third_edition/html/conversions.html ) é realmente difícil entender por que é que isso ocorre (você sabe que existe o "compile-time narrowing", o que possibilita você escrever:



mesmo sendo 5 um int, converte-se implicitamente o 5 para um short, porque o valor é pequeno suficiente para caber em um primitivo short.

Acredito que seja aceito o "Short s = 5" pelo "princípio de mínima surpresa" (principle of least surprise) porque é realmente difícil entender por que é que é válido usar "short s = 5" mas não seja válido usar "Short s = 5". É questão de ler com mais atenção a JLS.

E não, tais coisas absurdas não caem com tal nível de detalhamento.

This message was edited 1 time. Last update was at 09/02/2010 12:39:51

rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

Pessoal, e qual o motivo que esse não funciona?






Num tem cast implícito de int pra short, não?

This message was edited 1 time. Last update was at 09/02/2010 17:13:34


Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%

"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)"
[Email] [MSN]
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

Olhando a API, só aceita short, vejam:

static Short valueOf(short s)
Returns a Short instance representing the specified short value.

Short(short value)
Constructs a newly allocated Short object that represents the specified short value.


Tudo bem, mas o que intriga é que o cast implícito ocorre quando faz


Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%

"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)"
[Email] [MSN]
vmsb11
Java Ninja

Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline

rmalati wrote:Pessoal, e qual o motivo que esse não funciona?






Num tem cast implícito de int pra short, não?

de uma olhada no construtor de Short


ou seja vc tem que fazer isso na hora de criar
TiagoTC
JavaTeenager

Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline

Outra coisa que me deixa com a pulga atrás da orelha é que isso não compila:


Mas isso compila:



Alguém sabe explicar o porquê?

Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team