利用java的反射机制写个小程序:传入类名打印出重写和重载的方法

利用java的反射机制写个小程序:传入类名打印出重写和重载的方法,第1张

import java.lang.reflect.*

import java.util.*

class DumpMethods {

public static void main(String args[]) {

DumpMethods d=new DumpMethods()

d.getClassOverrideMethods("DEF")

d.getClassOverloadMethods("DEF")

}

public List getClassOverrideMethods(String classFilename){

List rewrite=new ArrayList()

Method[] m1=null,m2=null

try{

Class nowClass=Class.forName(classFilename)

Class superClass=(Class)nowClass.getGenericSuperclass()

m1=nowClass.getDeclaredMethods()

m2=superClass.getDeclaredMethods()

} catch (Throwable e) {

System.err.println(e)

}

for(int i=0i<m1.lengthi++)

for(int j=0j<m2.lengthj++)

{

if( m1[i].getName().equals(m2[j].getName())) { rewrite.add(m1[i].toString())break}

}

System.out.println("覆宴好野袜信盖的方晌喊法")

for(int k=0k<rewrite.size()k++)

System.out.println(rewrite.get(k))

return rewrite

}

public List getClassOverloadMethods(String classFilename){

List rewrite=new ArrayList()

Method[] m1=null

try{

Class nowClass=Class.forName(classFilename)

m1=nowClass.getDeclaredMethods()

} catch (Throwable e) {

System.err.println(e)

}

for(int i=0i<m1.lengthi++){

for(int j=0j<m1.lengthj++)

{

if(j==i) continue

if( m1[i].getName().equals(m1[j].getName())) { rewrite.add(m1[i].toString())break}

}

}

System.out.println("重写的方法")

for(int k=0k<rewrite.size()k++)

System.out.println(rewrite.get(k))

return rewrite

}

}

去掉using namespace std,换成更小的名字空间

比如本宏早灶程序里用到的,用using std::coutusing std::endl

或者不用名字空间,用#include <睁扮iostream.h>等,有几种解决办法

据说这是VC6。0的一个BUG,只要含有using namespace std就会提示友员函数没有访问私有成员的权限。

换个对标准蔽扮C++支持更好的编译器吧。。。


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

原文地址: https://outofmemory.cn/yw/12254184.html

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

发表评论

登录后才能评论

评论列表(0条)

保存