| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/01/2010 23:37:01
|
rmalati
Virtual Machine Man
![[Avatar]](/images/avatar/3bc8f7011e08bfe6830c967b497bdf6d.jpg)
Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline
|
Boa noite.
a esta hora não consigo mais pensar em nada pra entender esse código.
A minha dúvida é que a atribuição [][] me parece que está tentando criar um array 2D sendo que o tipo que eu declarei é [] 1 D apenas.
No segundo codigo o compilador diz: Type mismatch: cannot convert from Integer[][] to Integer[]
Eu testei vários tipos primitivos e não funciona, só com Object que dá certo.
Apelei e fiz isso, e pior que funciona:
To ficando louco ou isso realmente compila???
Alguem pode me ajudar??
Obrigado.
This message was edited 3 times. Last update was at 25/01/2010 23:43:41
|
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) 26/01/2010 00:09:40
|
menphis
Entusiasta Java
Membro desde: 22/01/2010 12:25:34
Mensagens: 15
Offline
|
Isso também funciona. Consegue enxergar o porque agora?
|
"It's not what you know, it's when you know it."
How Projects Really Work. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 06:25:45
|
sulito
Virtual Machine Man
Membro desde: 23/11/2009 07:15:59
Mensagens: 608
Offline
|
menphis 1. 1-
2. Object object = new Object[5][5];
1- Object object = new Object[5][5];
Isso também funciona. Consegue enxergar o porque agora?
Eu acho que não entendi direito podias ser mais claro, porque no forum tem iniciantes como eu que não entendemos a idea ,
mas tendando pensar sem saber se estou certo ou errado, é o seguinte quando se fala da classe Object ela pode aceitar todo o tipo de dados possiveis seja objecto ou primitivo, então por isso aceitou o array, sera isso????
|
LPI-101 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 06:46:19
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
A pegadinha é que Object[] extends Object, por isso essa coisa estranha surge. Como Integer[] não herda de Integer, esse problema não surge desta forma, mas Integer[] "herda" de Object[], então ainda dá para ter problemas semelhantes usando Integer[]. (coloquei o herda entre aspas porque não é exatamente isso que ocorre, mas é o efeito que se tem na prática).
Vejamos isso:
Object[] object = new Object[5][4];
A variável object vai virar um array com 5 elementos, e em cada posição do array pode ser colocado um Object.
Cada posição desse array será inicializada com um objeto do tipo Object[], contendo 4 posições.
Enfim, essa é uma esquisitice da linguagem que na prática não serve para nada. Na verdade acredito que isso nem seja intencional e tenha surgido como um efeito colateral acidental da forma como a linguagem trabalha arrays.
Java não é uma linguagem perfeita e contém alguns erros de projeto. Alguns destes erros estão no tratamento de arrays, que fazem surgir coisas bem estranhas.
Se você está estudando para a prova de certificação, pode ficar mais tranquilo porque esse tipo de maluquice não é cobrada. Você verá códigos manipulando arrays e matrizes, mas nenhum fazendo esse tipo de coisa aí.
This message was edited 2 times. Last update was at 26/01/2010 06:54:22
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 08:07:47
|
rmalati
Virtual Machine Man
![[Avatar]](/images/avatar/3bc8f7011e08bfe6830c967b497bdf6d.jpg)
Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline
|
Essa foi uma questão de um mock CertPal, um dos indicados do JavaRanch.
Eu não entendi ainda o motivo que funciona, mas eu já sei que se ver isso na prova vai compilar se o tipo for Object.
No mock eu errei pq marquei que não compilava.
Valeu pessoal pelas respostas.
|
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) 26/01/2010 09:48:42
|
Paulo Reis Rosa
Smalltalk
Membro desde: 26/01/2010 09:32:41
Mensagens: 1
Offline
|
A explicação é simples.
Tudo o que está instanciado em java é um objecto.
Portanto:
Object a;
a = new Xpto[4]; // Válido
Object [] b = new Xpto[3][4];
Só quer dizer que:
Object b0, b1, b2;
b0 = new Xpto[4]; // igual para b[0]
b1 = new Xpto[4]; // igual para b[1]
b2 = new Xpto[4]; // igual para b[2]
Ou seja, eu não vou poder referenciar um Xpto directamente de (b[0])[3] , mas vou poder fazer:
Xpto [] k;
Xpto l;
k = (Xpto []) b[0];
l = k[3];
Espero que tenha dado alguma luz.
Resumindo, tudo em java tudo é objecto. Depois é só uma questão de ter "cast"s válidos.
Abraços,
Paulo
PS: Não pude testar o código, por isso pode ter falhas, mas o princípio é esse
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 12:51:13
|
menphis
Entusiasta Java
Membro desde: 22/01/2010 12:25:34
Mensagens: 15
Offline
|
Minha justificativa é simples, todo Array é um objeto, na verdade tudo exceto os primitivos são objetos, e você ainda pode "empacotar" um primitivo num objeto.
Pra você entender, é só olhar o que o objeto está fazendo referência na verdade, tente percorrer o array para perceber.
|
"It's not what you know, it's when you know it."
How Projects Really Work. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 20:00:51
|
rmalati
Virtual Machine Man
![[Avatar]](/images/avatar/3bc8f7011e08bfe6830c967b497bdf6d.jpg)
Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline
|
Primeiramente, muito obrigado pela ajuda.
Ontem eu realmente achei que estava em outro planeta quando ví essa declaração.
Pois bem.
O que eu entedi é que isso só funciona pois Object é a classe raiz de todo e qualquer objeto em Java.
Então o tipo Object pode ser referênciar qualquer objeto no planeta Java, pois sempre estará ACIMA na árvore de herança, e um Super Tipo sempre pode referênciar um objeto do subtipo.
Me corrijam se eu estiver enganado.
This message was edited 1 time. Last update was at 26/01/2010 20:02:51
|
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) 27/01/2010 05:03:46
|
sulito
Virtual Machine Man
Membro desde: 23/11/2009 07:15:59
Mensagens: 608
Offline
|
Estas certissimo, não tem outra explicação possivel, é por Object se o objecto pai de todos
|
LPI-101 |
|
|
 |
|
|