求助..RTTI的一个问题..谢谢

minshuai 2005-05-25 07:03:12
Thinking in java中的一道题:
写一个方法,这个方法能接收一个对象,然后递归打印这个对象所属类系的所有类。

import java.lang.reflect.*;
import java.util.regex.*;
import java.lang.Class;
import java.lang.Integer;

class Base{}

public class GetClass
{
static void f(Object x)
{
String s = x.getClass().toString();
System.out.println(s);
try
{
Class c = Class.forName(s);
Class[] c1 = c.getClasses();
for(int i=0; i<c1.length; i++)
{
System.out.println(c1);
}
}
catch(ClassNotFoundException e)
{
System.out.println("Error");
}
}
public static void main(String[] args)
{
f(new Base());

}
}

运行结果:
class Base
Error
请问为什么会有异常?
如果大家有好的方法解决这个问题,请贴上,谢谢!!
...全文
55 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
minshuai 2005-05-26
  • 打赏
  • 举报
回复
忘了写上个程序的结果了:
class Derived
class Base
class java.lang.Object
null
minshuai 2005-05-26
  • 打赏
  • 举报
回复
我找到方法了,不过好像很麻烦,谢谢前面那位大哥!
import java.lang.reflect.*;
import java.util.regex.*;
import java.lang.Class;
import java.lang.Integer;

class Base{}
class Derived extends Base{}
class Derived1 extends Derived{}

public class GetClass
{
static void f(Object x)
{
String s = x.getClass().toString().Replace("class ","");
try
{
Class c = Class.forName(s);
Class c1 = c.getSuperclass();
System.out.println(c1);
if(c1 != null)
{
Object o = c1.newInstance();
f(o);
}
}
catch(ClassNotFoundException e)
{
System.out.println("Error");
}
catch(InstantiationException e)
{
System.out.println("Error1");
}
catch(IllegalAccessException e)
{
System.out.println("Error2");
}
}
public static void main(String[] args)
{
f(new Derived1());

}
}
发现不会用正则表达式
Octer 2005-05-25
  • 打赏
  • 举报
回复
经验告诉我问题应该出现在这里
String s = x.getClass().toString();
System.out.println(s);
s的类名称不对吧,根据你在上一行代码输出应该叫做Base而非class Base

62,614

社区成员

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

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