Eu estava procurando a pergunta: instanciar uma classe a partir de seu nome de string, que descreve como instanciar uma classe ao ter seu nome. Existe uma maneira de fazer isso em Java? Terei o nome do pacote e o nome da classe e preciso ser capaz de criar um objeto com esse nome específico.
java
string
object
instantiation
ict1991
fonte
fonte
Respostas:
Dois caminhos:
Método 1 - apenas para classes com um construtor sem arg
Se sua classe tiver um construtor sem arg, você pode obter um
Class
objeto usandoClass.forName()
e usar onewInstance()
método para criar uma instância (embora esteja ciente de que esse método é freqüentemente considerado mal porque pode derrotar as exceções verificadas do Java).Por exemplo:
Método 2
Uma abordagem alternativa mais segura que também funciona se a classe não tiver nenhum construtor sem arg é consultar seu objeto de classe para obter seu
Constructor
objeto e chamar umnewInstance()
método neste objeto:Ambos os métodos são conhecidos como reflexão . Normalmente, você terá que capturar as várias exceções que podem ocorrer, incluindo coisas como:
fonte
newInstance()
, poderíamos lançá-lo de volta para o nosso próprio objeto?instance
paracom.foo.MyClass
? dado que com.foo.MyClass é apenas uma stringfonte
use Class.forName ("String nome da classe"). newInstance ();
Isso fará com que a classe chamada A seja inicializada.
fonte
Para tornar mais fácil obter o nome totalmente qualificado de uma classe para criar uma instância usando
Class.forName(...)
, pode-se usar oClass.getName()
método. Algo como:Em seguida, você pode lançar o objeto que você recebe de volta para qualquer classe que você passar
makeObject(...)
:fonte
clazz.newInstance()
vez dogetName
entãofromName
?Use reflexão java
Criando Novos Objetos Não há equivalente à invocação de método para construtores, porque invocar um construtor é equivalente a criar um novo objeto (para ser mais preciso, criar um novo objeto envolve tanto alocação de memória quanto construção de objeto). Portanto, o equivalente mais próximo do exemplo anterior é dizer:
que encontra um construtor que lida com os tipos de parâmetro especificados e o invoca, para criar uma nova instância do objeto. O valor dessa abordagem é que ela é puramente dinâmica, com pesquisa e invocação do construtor no tempo de execução, em vez de no tempo de compilação.
fonte
Class.forName ("ClassName") resolverá seu propósito.
fonte
fonte
algo assim deve funcionar ...
fonte
O uso
newInstance()
direto está obsoleto no Java 8. Você precisa usarClass.getDeclaredConstructor(...).newInstance(...)
com as exceções correspondentes.fonte