Maison  >  Article  >  Java  >  Explication détaillée de l'obtention d'objets via la classe Class

Explication détaillée de l'obtention d'objets via la classe Class

零下一度
零下一度original
2017-06-28 09:33:191210parcourir

La façon d'obtenir un objet via l'objet Class est de l'obtenir via class.newInstance() et d'instancier un objet en appelant les paramètres de construction par défaut.

 1 /** 2  * Created by hunt on 2017/6/27.   
 * 测试的实体类 4  
 * @Data 编译后会自动生成set、get、无惨构造、equals、canEqual、hashCode、toString方法 5  
 */ 6 @Data 7 public class Person { 8     private String name; 9     
 private int age;10 }

 1 /** 2  * Created by hunt on 2017/6/27. 3  
 */ 4 public class NewInstanceTest { 5     public static void main(String[] args) { 6         
 Class<Person> personClass = Person.class;//获取Class实例 7         try { 8             
 Person p = personClass.newInstance();//通过Class获得Person实例 9             
 p.setAge(28);10             p.setName("hunt");11             
 System.out.println(p);12         } catch (InstantiationException e) {13             
 e.printStackTrace();14         } catch (IllegalAccessException e) {15             
 e.printStackTrace();16         }17     }18 }

Astuce : class.newInstance() est instancié via un constructeur sans argument. Il existe un constructeur sans paramètre. S'il existe un constructeur paramétré, le constructeur sans paramètre n'existe pas et une exception java.lang.InstantiationException sera levée lorsque l'objet est obtenu par réflexion.

 1 /** 2  * Created by hunt on 2017/6/27. 3  
 * 测试的实体类 4  */ 5  6 public class Person { 7     private String name; 8     
 private int age; 9 10     public String getName() {11         return name;12     }13 14     
 public int getAge() {15         return age;16     }17 18     public void setName(String name) {19         
 this.name = name;20     }21 22     public void setAge(int age) {23         this.age = age;24     }25 26     
 public Person(String name,int age){}//有参数构造函数27 }
 1 /** 2  * Created by hunt on 2017/6/27. 3  */ 4 public class NewInstanceTest { 5     
 public static void main(String[] args) { 6         Class<Person> personClass = Person.class;//获取Class实例 7         
 try { 8             Person p = personClass.newInstance();//通过Class获得Person实例 9            
  p.setAge(28);10             
 p.setName("hunt");11             System.out.println(p.getAge()+"----"+p.getName());12         } 
 catch (InstantiationException e) {13             e.printStackTrace();14         } 
 catch (IllegalAccessException e) {15             e.printStackTrace();16         }     }
  }

Résumé : lors de la création de classes d'entités à l'avenir, vous devez apporter un argument sans argument constructeur. Afin qu'aucune exception ne soit levée lors de l'instanciation de l'objet lors de l'utilisation de la réflexion à l'avenir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn