反射获取对象

xiaoxiao2021-02-27  335

package com.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; /** * 反射获取类,以及对象 * @author Sailing * */ public class TestClassForName{ public static void main(String[] args) throws Exception{ Class<?> clazz = TestClassForName.getClazz1("com.reflect.Person"); //Class<?> clazz = TestClassForName.getClazz2(); //Class<?> clazz = TestClassForName.getClazz3(); TestClassForName.doSomething(clazz); } /** * 根据类的全名,forName方法 获取 【推荐使用】 * @param str * @return * @author Sailing */ private static Class<?> getClazz1(String str){ Class<?> clazz =null; try { clazz = Class.forName(str); } catch (ClassNotFoundException e) { e.printStackTrace(); } return clazz; } /** * 根据类的 .class方法获取 * @return * @author Sailing */ private static Class<?> getClazz2(){ Class<?> clazz = Person.class; return clazz; } /** * 根据对象来获取 * @return * @author Sailing */ private static Class<?> getClazz3(){ Person p = new Person(); Class<?> clazz = p.getClass(); return clazz; } private static void doSomething(Class<?> clazz) throws InstantiationException, IllegalAccessException{ System.out.println("class---"+clazz); Object p =TestClassForName.getInstance1(clazz); //Object p =TestClassForName.getInstance2(clazz); System.out.println(p); } /** * 由类获取对象 * @param obj * @return * @throws InstantiationException * @throws IllegalAccessException * @author Sailing */ private static Object getInstance1(Class<?> clazz) throws InstantiationException, IllegalAccessException{ Object instance = clazz.newInstance(); return instance; } private static Object getInstance2(Class<?> clazz){ Constructor<?> cons; Object instance = null; try { cons = clazz.getConstructor(new Class[] {}); try { instance = cons.newInstance(new Object[]{}); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (NoSuchMethodException | SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } return instance; } }
转载请注明原文地址: https://www.6miu.com/read-5193.html

最新回复(0)