| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 12:25:25
|
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 12:37:06
|
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....
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 12:38:26
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 17:10:55
|
rmalati
Virtual Machine Man
![[Avatar]](/images/avatar/3bc8f7011e08bfe6830c967b497bdf6d.jpg)
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)" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 17:17:54
|
rmalati
Virtual Machine Man
![[Avatar]](/images/avatar/3bc8f7011e08bfe6830c967b497bdf6d.jpg)
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)" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/02/2010 17:23:08
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2010 00:49:33
|
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 |
|
|
 |
|
|