Em Java só é possível criar novos objetos através de “new” ou então via serialização.
Paulo_Silveira
Nao criou nao. Criou apenas uma outra referencia para o mesmo objeto que paramUser se referenciava (alem de ter trocado a maneira a qual se referenciava ao objeto atraves do casting!
Tem uma estensa explicacao sobre isso na apostila do FJ11, que voce pode baixar aqui (capitulo de OO e referencias):
J
JavaTux
thingol:
Você não criou nada aí - só fez um “cast”.
Em Java só é possível criar novos objetos através de “new” ou então via serialização.
e DI por IOC entraria nessa também?
T
thingol
Dependency Injection é feita por algum framework que carrega suas classes e acaba chamando a API de Reflection “newInstance” do objeto Constructor relativo à classe carregada.
Tá bom, tá bom, você não codifica o new, e este não é chamado explicitamente. É que falei assim só para simplificar um pouco. (Quando alguém está aprendendo eu não digo que há 200 jeitos de fazer a mesma coisa, mas só 2 principais, mais para não dar um nó na cabeça de quem está aprendendo.)
sergiotaborda
Sim. Usando Class.newInstance() ou constructor.newInstance(Object … params).
A primeira cria o objeto usando o contrutor sem parametros, mas dá pau se ele não existir ( por isso que os JavaBeans têm que ter um construtor sem parametros). A segunda forma é mais genérica pois é possivel invocar o construtor. Esta é a forma utilizada por injetores. Ele determinam os valores dos parametros do construtor e depois o invocam.
F
flavior_alves
Já existe uma instância na memória HEAP da JVM para o objeto Usuario, ou seja, paramUser.
E neste caso:
Usuario usuario = (Usuario) paramUser;
Você está apenas fazendo uma nova referência para o objeto existente, em resumo, não é necessário utilizar o new para um objeto já criado, e apenas referenciá-lo.
Abraços
maior_abandonado
uma outra forma meio esquisita até na minha opinião, foi utilizada na classe Calendar…
a classe Calendar é abstrata, sendo assim não pode ser instanciada… eu queria saber pq q foi criada como abstrata (aproveitando o tópico para essa curiosidade)
tipo… foi criado um metodo getInstance() para retornar uma instancia da classe, ja que ela é abstrata, e não se pode instancia-la… pq q não se cria ela como uma classe comum então?
T
thingol
Calendar é abstrata; se você usar getInstance (um método estático), ela lhe retorna uma instância da classe GregorianCalendar. A idéia é que, dependendo da situação, getInstance lhe retornasse outra coisa (por exemplo, em algum outro país ele lhe retornasse uma instância de IslamicCalendar ou BuddhistCalendar ou ImperialJapaneseCalendar ou MayaCalendar ou outra coisa ainda.)
maior_abandonado
dexa eu ver se eu intendi bem… ele retorna uma instancia que tenha os horarios da localidade que conste no SO ?? é isso mesmo???
a duvida eu acho que eu não espressei bem, era por que ter uma classe abstrata que retorne um instancia dela (se for para fazer isso seria mais facil cria-la não abstrata…)
agora devido a questão da localidade eu acho q eu intendi… é isso mesmo q eu intendi?