java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名

java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名,第1张

可以使用以下代码来获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名。

import javaioFile;

import javalangreflectMethod;

public class LoopApp {

public static void main(String[] args) throws Exception {

String packageName = "";

File root = new File(SystemgetProperty("userdir") + "\\src");

loop(root, packageName);

}

public static void loop(File folder, String packageName) throws Exception {

File[] files = folderlistFiles();

for (int fileIndex = 0; fileIndex < fileslength; fileIndex++) {

File file = files[fileIndex];

if (fileisDirectory()) {

loop(file, packageName + filegetName() + "");

} else {

listMethodNames(filegetName(), packageName);

}

}

}

public static void listMethodNames(String filename, String packageName) {

try {

String name = filenamesubstring(0, filenamelength() - 5);

Object obj = ClassforName(packageName + name);

Method[] methods = objgetClass()getDeclaredMethods();

Systemoutprintln(filename);

for (int i = 0; i < methodslength; i++) {

Systemoutprintln("\t" + methods[i]getName());

}

} catch (Exception e) {

Systemoutprintln("exception = " + egetLocalizedMessage());

}

}

}

泛型 java后面的版本才有

如 public Interface Test<T extends String> T是String的子类

List<String> list里面只能存储String或其子类

实现以上场景,在java中有多种方法,最直接方式的是通过反射获取,但是反射有较大的性能损耗,一般不建议用在运行阶段反射,大多开源框架是在初始化的时候通过反射来实例化。

1、通过反射获取

package test;

import javalangreflectField;

public class Demo2 {

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {

String op = "strA";

Test t = new Test();

// /通过类的字节码得到该类中声明的所有属性,无论私有或公有

        Field strs = TestclassgetDeclaredField(op);

        // 设置访问权限(这点对于有过android开发经验的可以说很熟悉)

        strssetAccessible(true); 

        // 得到私有的变量值

        String[] as = (String[]) strsget(t);

        

        

Systemoutprintln(aslength);

}

}

class Test {

private String[] strA = new String[]{"a","b","c"}; 

private String[] strB = new String[]{"d","e","f"}; 

}

2、通过map设置获取

package test;

import javautilHashMap;

import javautilMap;

public class Demo2 {

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {

Map<String,String[]> map = new HashMap<String,String[]>(); 

        mapput("strA", new String[]{"a","str","c"}); 

        mapput("strB", new String[]{"d","e","f"}); 

        String op = "strB"; 

        

        String result = mapget(op)[0]; // "d" 

}

}

以上两种方法虽然都能实现需求,但是在实际情况中还是得看具体的情况来界定选择。

以上就是关于java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名全部的内容,包括:java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名、java中的接口名字后面有<t>是什么意思、java 中怎么获得以该字符串命名的变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9636229.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存