可以使用以下代码来获取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());
}
}
}
有3种方法。
1、help() 一般help里面都包含了详细的说明,包含各种类。不过不一定都有。
2、python自带的帮助(>
import javalangreflectInvocationTargetException;
import javalangreflectMethod;
public class TheReflect {
/
@param args
@throws NoSuchMethodException
@throws SecurityException
@throws InvocationTargetException
@throws IllegalAccessException
@throws IllegalArgumentException
/
public static void main(String[] args) throws SecurityException,
NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
// TODO Auto-generated method stub
/ 详细的API使用方法参加JDK的doc文档中的javalangClass和javalangreflectMethod /
/ 相当于你在Spring的Context中获取bean对象 /
TheBeanClazz theBean = new TheBeanClazz();
/ 通过获取到bean对象得到该对象的类定义 /
Class clazz = theBeangetClass();
/ 通过上面得到的类定义对象clazz得到指定名称和参数类型列表的方法定义 /
Method m = clazzgetMethod("sayHello", Stringclass);
/
在指定的对象(theBean)上调用符合上面方法定义的方法,
并且制定方法的入口参数值列表(这个方法只有一个参数,
如果是多个参数用逗号分隔)
/
String msg = (String) minvoke(theBean, "床上等你");
Systemoutprintln("返回的结果 :" + msg);
}
}
class TheBeanClazz {
public String sayHello(String s) {
Systemoutprintln("Hello :" + s);
return "Hello :" + s;
}
}
1、Test t = new Test()Class clazz = tgetClass()Systemoutprintln(clazzgetCanonicalName())Systemoutprintln(clazzgetSimpleName())
2、public class TestReflect {public static void main(String[] args) throws Exception {TestReflect testReflect = new TestReflect()Systemoutprintln(testReflectgetClass()getName())// 结果 netxsoftlabbaikeTestReflect}}
3、Java程序
function
getElementByClassName(TagName,classname){
var
tags=documentgetElementsByTagName(TagName);
var
list=[];
for(var
i
in
tags)
{
var
tag=tags[i];
if(tagclassName==classname){listpush(tag);}
}
return
list;
}
consolelog(getElementByClassName("div","main"));
//2个地方用错了
一个是
tagname你默认用div了
另一个地方
push方法后面是小括号
()
java是不支持在运行中进行强制转化的! 如果事先知道类型,可以通过强制转化实现! 如果不知道! 可以采用这种方式!
String className = objgetClass()getName(); 得到类名
然后:
A a = (A)ClassforName(className)newInstance();
//上面这句话的意思是,forName(className):静态加载className这个类;
// newInstance(),实例化一个对象
// A 代表你知道的这人类或者这个类的父类, 把强制转化成你所要的对象。
这和你
A a = new A();
是一样的效果!
请注意看异常信息。未能从“当前”程序集获取“外部”程序集中拥有指定完整限定名的类型。
事实上,直接使用TypeGetType()会从当前程序集,也就是"test3"程序集中查找。
想要查找NHapiModelV23程序集中的类型,请在该程序集上使用GetType
Assembly asmNHapi=AssemblyLoadFrom();Type outerType=asmNHapiGetType();
如果想尽量少的改动自己的代码也成,直接在你的var classes上进行linq查询就好。
Type[] classes=AssemblyLoadFrom()GetTypes();Type tt=classesFirstOrDefault(t=>tFullName="NHapiModelV23GroupORM_001_"+properties[i]);
if(tt!=null)
DoSomething();
最后提醒,请勿使用AssemblyLoad方法,因为该方法已被弃用,请使用LoadFrom和LoadFile来加载外部程序集。
此外,类型的完全限定名和短名并不影响类型的搜索。使用GetType时会从根命名空间开始一层一层查找的,如果各层命名空间下没有重名的类,你甚至没有使用完全限定名的必要。比如上面的代码里可以使用短名进行查找。
Type tt=classesFirstOrDefault(t=>tName="ORM_001_"+properties[i]);刚看到上面的回答,这里我要肯定的告诉你,不管你是用文件方式还是项目引用方式,都不可能使用TypeGetType静态方法获取另一个程序集中的类型,必须在对方的程序集上进行查找!
如果你非要使用TypeGetType静态方法获取其他程序集中的类型,可以使用其的一种重载:
public static SystemType GetType(string typeName, SystemFunc<AssemblyName,Assembly> assemblyResolver, SystemFunc<Assembly,string,bool,Type> typeResolver)该静态方法要求你提供自己的程序集名称解析器和类型名称解析器,非特殊情况不推荐使用。该方法是为了在多个程序集中同时查找多个类型而被微软提供的。
以上就是关于java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名全部的内容,包括:java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名、python 怎么取出一个指定模块中的所有类的名称、怎么根据类名和方法名调用方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)