
获取当前线程的ClassLoader,通过ClassLoader获取当前工作目录,对目录下的文件进行遍历扫描。过滤出以class为后缀的类文件,并加载类到list中,对list中所有类进行校验,判断是否为指定接口的实现类,并排除自身。返回所有符合条件的类。
这个方没有考虑不同的文件格式。当程序打成jar包,发布运行时,上述的这种遍历file的 *** 作就失效了。只能扫描到当前方法的同级目录及其子目录。无法覆盖整个模块,遍历文件的逻辑太啰嗦,可以简化。
扩展资料:
Java使用注意事项:
1、如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件。
2、如果指定了classpath,那么会在指定的目录下查找要运行的类文件。
3、PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。
4、需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。
你的意思就是要获取内部类的属性和方法喽?
Class classes[]=clazzgetDeclaredClasses();//返回类包含的全部内部类
然后再进行处理呗。
Class clazz=XXgetClass();
Class classes[]=clazzgetDeclaredClasses();
for(Class c:classes){//对成员内部类进行反射
int i=cgetModifiers();
String s=ModifiertoString(i);
if(scontains("static"))//静态内部类的处理
cgetConstructor()newInstance();
else//实例内部类的处理
cgetConstructor(ricgetClass())newInstance(ric);
}
//由于匿名内部类没有构建器,因此无法创建实例,也无法直接访问其中的方法,但可以通过下面的方式巧秒的执行其中的方法或成员变量。
Runnable r=(Runnable)(clazzgetField("ta")get(ric));
rrun();
反射出来的Class对象可以得到自己声明的方法。和所有方法。
如果你要得到当前类声明的方法,可以用getDeclaredMethods()
要得到所有的方法可以用getMethods()
如果要得到父类的方法,你可以先去得到父类。getSuperclass()
第一种:通过forName()方法;
第二种:类class;
第三种:对象getClass()。
举例如下:
package
test;
public class Demo{
public static void
main(){
Class<> c1 = null;
Class<> c2 =
null;
Class<> c3 =
null;
//三种反射用实例化方式
try{
//最常用的一种形式
c1 =
ClassforName("testX");
}catch(ClassNotFoundException
e){
eprintStackTrace();
}
//通过Object类中的方法实例化
c2
= new X()getClass();
//通过类class实例化
c3 =
Xclass;
Systemoutprintln("类名:" + c1getName());
//得到类名
Systemoutprintln("类名:" + c2getName());
//得到类名
Systemoutprintln("类名:" + c3getName());
//得到类名
}
}
以上就是关于Java 怎么通过反射获取并实现这个类里面的接口,并且实现接口中的方法全部的内容,包括:Java 怎么通过反射获取并实现这个类里面的接口,并且实现接口中的方法、JAVA 反射获取的属性是复合类型、怎样用反射调用一个类的方法,这个类继承了其他类的内部类等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)