
可以使用以下代码来获取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 中怎么获得以该字符串命名的变量等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)