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());

}

}

}

有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 怎么取出一个指定模块中的所有类的名称、怎么根据类名和方法名调用方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9320981.html

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

发表评论

登录后才能评论

评论列表(0条)

保存