2017-09-11 4 views
0

Comment utiliser return de "Class.forName (String)" comme type correct pour variable? Je veux dire, par exemple - si je reçois classe en utilisant:Comment utiliser return de "Class.forName (String)" en tant que type pour variable?

Class.forName("java.lang.String");

comment l'utiliser comme "String" comme:

String something = "text"; 

?? Merci pour toute aide! :)

+0

Je suppose que vous voulez créer une instance en utilisant un 'String s =" java.lang.String "' dans votre cas? Voir [Utilisation de la réflexion dans Java pour créer une nouvelle instance avec le type de variable de référence défini sur le nouveau nom de classe d'instance?] (Https://stackoverflow.com/questions/2215843/using-reflection-in-java-to-create- a-new-instance-with-the-reference-variable-ty) pour voir si elle correspond à ce que vous voulez – AxelH

+0

Il est dans le Javadoc de classe, par exemple 'Classe t = Class.forName (" java.lang.Thread ")': https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#forName(java.lang. Chaîne) –

+0

Merci pour vos commentaires. Je veux le faire sans importer Class ce que je veux obtenir en utilisant Class.forName (patth); C'est possible? J'ai juste besoin d'utiliser des méthodes de cette classe: P –

Répondre

0

Démo et quelques mots, mais je ne suppose pas que cela a un sens pratique pour vous. Mon but est de donner un background très basique, des réponses plus compliquées arrivent aussi.

Object instance = null; 
try{ 
Class clazz = Class.forName("java.lang.String"); 
// now here is String.class 

    instance = clazz.newInstance(); 
    // empty String as Object 
}catch(Exception e) 
{ 
    e.printStackTrace(); 
} 

Une fois ce code instance aura chaîne vide (accessible comme objet, pas trop utile) Dans beaucoup de chose générale peut aller mal, peut-être classe pas sans arguments constructeur public etc

https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#newInstance()

0

Voici comment créer une instance String à l'aide de Reflexion.

String s = (String) Class.forName("java.lang.String") 
         .getConstructor(Class.forName("java.lang.String")) 
         .newInstance("Foo bar"); 
System.out.println(s); 

Cela récupérer un Class en utilisant Class.forName(String)

De cette classe, vous obtenez un constructeur spécifique qui acceptent un (paramètre 0..N) Class<?>... utilisant Class.getConstructor(Class<?>...). Et puis vous créez l'instance en passant la valeur de paramètre en utilisant Constructor.newInstance().

Ce n'est pas sûr, vous avez un lof d'exception à attraper de cela, mais cela va le faire.

Vous pouvez utiliser directement Class.newInstance mais un constructeur vide doit être disponible.