我如何知道一个类中有哪些属性和方法,又怎样在不知道的情况下调用呢?

smilelhh 2005-01-14 10:07:08
不知道有没有高手会?
...全文
366 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
treeroot 2005-01-14
  • 打赏
  • 举报
回复
http://blog.csdn.net/treeroot/archive/2004/12/29/232786.aspx

上面两个例子较多的利用了反射
treeroot 2005-01-14
  • 打赏
  • 举报
回复
http://blog.csdn.net/treeroot/archive/2004/12/29/232826.aspx
fog628 2005-01-14
  • 打赏
  • 举报
回复
pri
pro
pub
10
pri_print
pro_print
pub_print
Test
private
Press any key to continue...

我机上没有报错啊
iforem 2005-01-14
  • 打赏
  • 举报
回复
我帮你丁页一下

50分给我吧

呵呵
smilelhh 2005-01-14
  • 打赏
  • 举报
回复
to fog628(发粪涂墙)
很好。可以得到属性、方法名。

但是ms[0].invoke(new Test(), null);调用时报错:java.lang.reflect.InvocationTargetException

fog628 2005-01-14
  • 打赏
  • 举报
回复
import java.lang.reflect.*;

class Test{
private int pri = 10;
protected int pro = 20;
public int pub = 30;

private void pri_print(){
System.out.println("private");
}
protected void pro_print(){
System.out.println("protected");
}
public void pub_print(){
System.out.println("public");
}
}
public class Demo{
public static void main(String[] args)
throws IllegalAccessException,
IllegalArgumentException, InvocationTargetException{
Class c = Test.class;

Field[] fs = c.getDeclaredFields();
//设为可访问的
Field.setAccessible(fs, true);
for(int i = 0; i < fs.length; i++){
System.out.println(fs[i].getName());
}
//得到private int pri的值
System.out.println(fs[0].getInt(new Test()));

Method[] ms = c.getDeclaredMethods();
Method.setAccessible(ms, true);
for(int i = 0; i < ms.length; i++){
System.out.println(ms[i].getName());
}
//得到定义这个方法的类名
System.out.println(ms[0].getDeclaringClass().getName());
//调用private方法
ms[0].invoke(new Test(), null);
}
}
smilelhh 2005-01-14
  • 打赏
  • 举报
回复
我查了一下,在struts中有个commons-beanutils.jar包,好象可以解决这个问题。
不知道有哪个高手可以讲一下怎么用?
aiyy 2005-01-14
  • 打赏
  • 举报
回复
偶是菜鸟,偶来学习的。
treeroot 2005-01-14
  • 打赏
  • 举报
回复
反射很容易实现,现在好忙
smilelhh 2005-01-14
  • 打赏
  • 举报
回复
得到属性也行呀。
smilelhh 2005-01-14
  • 打赏
  • 举报
回复
比如我想从数据库中select一行数据时,
通过自动获得类属性和方法来设置valueobject呀。
classjava 2005-01-14
  • 打赏
  • 举报
回复
面向的3个特色里面就有封装这个概念,呵呵,在你不知道的类中想得到他的属性,和method恐怕不太easy
好像记得可以有个method是得到属性的,方法那个就没有
(希望没误导)
smilelhh 2005-01-14
  • 打赏
  • 举报
回复
只要能得到本身类里有哪些方法和哪些属性(包含private)

当然是通过代码自动实现
不徻写代码 2005-01-14
  • 打赏
  • 举报
回复
想通过这种方法来实现一些意想不到的功能。
---------------------------------------
啥功能?????
fog628 2005-01-14
  • 打赏
  • 举报
回复
呵呵,我觉得应该用反射来实现
不徻写代码 2005-01-14
  • 打赏
  • 举报
回复
????偶看jdk源码,或JB的源码支持
-----------------------------------
又怎样在不知道的情况下调用呢?
------------------------------------
???????????
smilelhh 2005-01-14
  • 打赏
  • 举报
回复
我的意思是在我的类里,想通过这种方法来实现一些意想不到的功能。呵呵
thomas_20 2005-01-14
  • 打赏
  • 举报
回复
装个jbuilder吧,你想知道哪个类里有那些方法和属性只要类名.就会弹出方法和属性了。如一个String对象s,你只要输入s.就ok了
还有就是看API文档了
fog628 2005-01-14
  • 打赏
  • 举报
回复
up一下,等根兄来
smilelhh 2005-01-14
  • 打赏
  • 举报
回复
呵呵,好了。
谢谢天才!!
加载更多回复(8)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧