父类信息查看器

package test;

/**
 * 父类信息查看器
 * 在查看别人的源码时,有时候很想有个可以列出某个类的父类信息的工具。
 * 没找到,于是做了一个。
 * 对于目前情况来说, showSuperclass(Class clz) 已经够用了。
 * 更深入的,目前做了一点研究,有空再完善吧。
 */

import java.lang.reflect.Type;

import org.apache.log4j.Logger;


public class ShowSuper {
	private static Logger log = Logger.getLogger(ShowSuper.class);
	
	/**
	 * 递归获取一个类的所有父类
	 * @param clz
	 */
	public static void showSuperclass(Class clz)
	{
		while(clz!=null)
		{
			System.out.println( "16 (" + clz.getName() + ".java:1)");
			clz = clz.getSuperclass();
		}
	}
	
	/**
	 * getGenericSuperclass 和 getSuperclass 好象没有什么区别,除了类型
	 * @param clz
	 */
	
	public static void showGenericSuperclass(Class clz)
	{
		while(clz!=null)
		{
			System.out.println( "16 (" + clz.getName() + ".java:1)");
			clz = (Class)clz.getGenericSuperclass();
		}
	}
	
	
	public static void showInterfaces(Class clz)
	{
		System.out.println( "(" + clz.getName() + ".java:1)");
		if(clz!=null)
		{
			Class[] clzs = clz.getInterfaces();
			System.out.println( "clzs.length:" + clzs.length);
			for(int i=0; i<clzs.length; i++)
			{
				System.out.println( "30 (" + clzs[i].getName() + ".java:1)");
				//showSuperclass(clzs[i]);
			}
		}
	}

	/**
	 * getGenericInterfaces 其实应该改名为 getSuperInterfaces 吧
	 * 嗯,一个接口可以继承多个接口
	 * @param clz
	 */
	public static void showGenericInterfaces(Class clz)
	{
		System.out.println( "(" + clz.getName() + ".java:1)");
		if(clz!=null)
		{
			Type[] clzs = clz.getGenericInterfaces();
			System.out.println( "clzs.length:" + clzs.length);
			for(int i=0; i<clzs.length; i++)
			{
				System.out.println( "57 (" + ((Class)clzs[i]).getName() + ".java:1)");
				//showSuperclass(clzs[i]);
			}
		}
	}
	
	
	public static void main(String[] args)
	{
		//Class clz = log.getClass(); 
		//log.debug( clz );
//		Class clz = null;
//		for(int i=0; i<10; i++)
//		{
//			if(clz==null)
//			{
//				clz = log.getClass();
//			}
//			else
//			{
//				clz = clz.getSuperclass();
//			}
//			if(clz==null)
//			{
//				break;
//			}
//			log.debug( "(" + clz.getName() + ".java:1)");
//			
//		}
		
		//showSuperclass(log.getClass());
		//showSuperclass(Class.class);
		
		//showInterfaces(Class.class);
		//showInterfaces(Imp01.class);
		//showInterfaces(Logger.class);
		//showSuperclass(Imp01.class);
		//showGenericSuperclass(Imp01.class);
		//showGenericInterfaces(Imp01.class);
		//showGenericInterfaces(Interface02.class);
		//showGenericInterfaces(Interface01.class);
		showGenericInterfaces(Interface11.class);
		//showSuperclass(Interface02.class);
		//showGenericSuperclass(Interface02.class);
		
	}
}

你可能感兴趣的:(java,apache,log4j)