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
publicclasscarro{publiccarro(){}}
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).
E
emanuel.LB
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…
Espero que tenha ajudado
Abraço
M
Marky.Vasconcelos
thingol:
Ponha os try/catchs adequados.
Objectobj=Class.forName("carro").newInstance();
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).
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 ?
Valew
T
thingol
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
É 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. )
G
guilherme_ha
Entao…
eu sei o nome do metodo a ser chamado
e seu retorno…
porem eu não sei qual é o objeto…
como ficaria pra eu pegar a string de retorno de um metodo ?
Valew
T
thingol
Digamos que a tal classe não implemente uma determinada interface, mas você saiba que ela tem um método