package com.example.myapplication.people;
public class Student implements IPeople{
@Override
public String say() {
return "I am a student";
package com.example.myapplication.people;
public class Teacher implements IPeople{
@Override
public String say() {
return "I am a teacher";
package com.example.myapplication;
import android.net.IpPrefix;
import com.example.myapplication.people.IPeople;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.reflections.Reflections;
public class Utils {
public static Map<String,Class> getAllIPeopleImpl(){
Reflections reflection=new Reflections("com.example.myapplication.people");
Map<String,Class> map=new HashMap<>();
Set<Class<? extends IPeople>> set=reflection.getSubTypesOf(IPeople.class);
for(Class c:set){
map.put(c.getSimpleName(),c);
return map;
package com.example.myapplication;
import com.example.myapplication.people.IPeople;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.*;
* Example local unit test, which will execute on the development machine (host).
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
public class ExampleUnitTest {
@Test
public void test() {
Map<String, Class> map = Utils.getAllIPeopleImpl();
try {
for (String str : map.keySet()) {
Object people = map.get(str).newInstance();
if(people instanceof IPeople){
System.out.println(str);
System.out.println(((IPeople) people).say());
} catch (IllegalAccessException | InstantiationException e) {
e.printStackTrace();
添加依赖implementation 'org.reflections:reflections:0.9.12'接口package com.example.myapplication.people;public interface IPeople { String say();}实现类package com.example.myapplication.people;public class Student implements IPeople{ @Override pu
文章目录Java ReflectionJava反射机制提供的功能Java反射相关的主要APIjava.lang.Class类Class类的核心要点Class类的重要API实例实例化Class类对象(四种方法)创建类对象并获取类的完整结构获取Class对象后创建类的对象通过反射调用类的完整结构获取实现的全部接口获取所继承的父类获取全部的构造器获取全部的方法获取全部的属性获取Annotation相关获取泛型相关获取类所在的包调用指定方法调用指定属性总结说明
Java Reflection
Reflection(反射)是被视为动态语言的关键,反射机制 允许程序在执行期借助于Reflection AP
通过反射获取当前类的接口并调用
java 9 以后对于clazz.newInstance() 过时 替换成clazz.getDeclaredConstructor().newInstance()
Java Class.forName()返回一个类
Class.forName()要求JVM查找并加载指定的类,作用是执行该类的静态代码段,加载了类以后还需要进行类初始化操作之后才能正常使用此类,类初始化操作就是执行一遍类的静态语句,包括静态变量的声明还有静态代码块。
** Class.forName
PHP5 具有完整的反射API,添加对类、接口、函数、方法和扩展进行反向工程的能力。
反射是什么?
它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。
其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。
PHP反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方
<!-- 反射库 -->
<!-- https://mvnrepository.com/artifact/org.reflections/reflections -->
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId&...
@SuppressWarnings("unchecked") private List<Class<ScmJob>> getAllSubclassOfTestInterface() {
Field field = null;
Vector v = null;
List<Class<TestInterface>> allSubclass = new Ar