Olá pessoal,
estou com um problema…
preciso instanciar uma classe a partir de se nome contido numa string.
é meio estranho mas vai funcionar +/- assim…
Em um determinado ponto do programa, usuário digita/escolhe o nome de uma classe numa lista
suponhamos que eu tenha um classe carro
public class carro{
public carro(){
}
}
entao o usuário digita num campo a palavra “carro” e a partir dessa string eu tenho que fazer o new carro();
pesquisei sobre refletion e generics, mas acho que não estou sabendo usar… ou realmente não tem jeito…
se alguem tiver uma dica…
Obviamente um objeto obj tal como o criado dessa maneira é meio inútil, já que o programa não sabe que métodos dele devem ser chamados (fora os que já estão definidos em java.lang.Object).
Você tambem deve lembrar que o nome que é passado para o reflection deve ser o nome completo da classe, ou seja caminho do pacote onde a classe esta + nome da classe (ex “com.minhaEmpresa.automoveis.Carro”). Outra coisa que pode causar problemas é a maneira como a instanciação é feita. Você pode usar o método newInstance(), mas o ideal é criar um objeto de contrutor e usa-lo para a instanciação.
Fora isso tem o que o thingol falou, para usar um método da classe o usuário teria que passar o nome do método, e, caso houvessem, os parâmetros e seus tipos…
Obviamente um objeto obj tal como o criado dessa maneira é meio inútil, já que o programa não sabe que métodos dele devem ser chamados (fora os que já estão definidos em java.lang.Object).[/quote]
Continuando.
Mas voce ainda tem algumas opções interessantes para invocalos.
Olá… vamos supor que o metodo que eu queira invocar é um getNomeCarro() que retorna uma String
Sem fazer o cast pra uma interface carro nao tem jeito de eu pegar o valor de retorno no caso uma string ?
[quote=guilherme_ha]Olá… vamos supor que o metodo que eu queira invocar é um getNomeCarro() que retorna uma String
Sem fazer o cast pra uma interface carro nao tem jeito de eu pegar o valor de retorno no caso uma string ?
Valew[/quote]
É claro que tem, mas aí você precisa saber várias coisas:
Qual é o nome do método
Que parâmetros você precisa passar
Qual o tipo do objeto retornado pelo método
Isso é um porre, e fica bem mais fácil se você souber que o tal objeto pertence a uma classe que implementa uma determinada interface (além de ser mais rápido. )