目前是jdk1.8,主要結合此進行;java
更新於2019-05-06數據庫
java提供的自省能力,能夠獲取類定義,方法,字段,構造器;能夠調用方法,構造實例,還能夠修改類定義this
--illegal-access={ permit | warn | deny }
jdk9中設置改參數,能夠控制反射訪問對應目標包的權限code
MonthTask monthTask = monthTaskrep.getOne(mainTaskId + 0L); Class<? extends MonthTask> mclass = monthTask.getClass(); Field field= mclass.getDeclaredField(name); Object val=field.get(monthTask);
根據實例獲取class,而後用class的到field,而後經過field來獲取結果,經常使用Field.get(Class的instance),固然還有其餘獲取值得方法,如Field.getString(instance),Field.getInteger(instance);對象
Method method =mclass.getDeclaredMethod("getTal" + i + "goal") ;//1 Object o= method.invoke(monthTask);//2
Class<? extends MonthTask> mclass = monthTask.getClass(); MonthTask monthTask= mclass.newInstance();
這個monthTask須要你去賦值;即經過獲取各類set方法去賦值;各類javaBean都是經過這種方式構造的; 固然MonthTask類必須符合javaBean的標準; ORM的映射也是經過反射實現的,繼承
<A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass){ } Entity entity= mclass.getDeclaredAnnotation(Entity.class);
Class<?> classz=new ArrayList<String>().getClass(); classz=ArrayList.class; Class<?> [] interfaces= classz.getInterfaces()(); for(Class<?> interface:interfaces){ System.out.println(interface.getName()); }
Field world = aClass.getDeclaredField("world"); if(!world.isAccessible()){ world.setAccessible(true); System.out.println(world.get(this)); }
在實際操做中,很是方便,但須要慎用接口