package DynamicSupply;
import java.lang.reflect.*;
import java.util.*;
/**
* -----------------------------------------------------------------------------
* ReflectClass.java - Dump a class using Reflection.
*
* Copyright (c) 1997 Chuck McManis, All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for NON-COMMERCIAL purposes and without
* fee is hereby granted provided that this copyright notice
* appears in all copies.
*
* CHUCK MCMANIS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
* SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. CHUCK MCMANIS
* SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT
* OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
* -----------------------------------------------------------------------------
*/
public class ReflectClass {
private String firstName = null;
private String lastName = null;
private int idNumber = 0;
public ReflectClass() {
super();
}
public static void main(String args[]) {
Constructor cn[];
Class cc[];
Method mm[];
Field ff[];
Class c = null;
Class supClass;
String x, y, s1, s2, s3;
Hashtable classRef = new Hashtable();
if (args.length == 0) {
System.out.println("Please specify a class name on the command line.");
System.exit(1);
}
try {
c = Class.forName(args[0]);
} catch (ClassNotFoundException ee) {
System.out.println("Couldn't find class '"+args[0]+"'");
System.exit(1);
}
/*
* Step 0: If our name contains dots we're in a package so put
* that out first.
*/
x = c.getName();
if (x.lastIndexOf(".") != -1) {
y = x.substring(0, x.lastIndexOf("."));
System.out.println("package "+y+";\n\r");
}
/*
* Let's use the Reflection API to sift through what is
* inside this class.
*
* Step 1: Collect referenced classes
* This step is used so that I can regenerate the import statements.
* It isn't strictly required of course, Java works just fine with
* fully qualified object class names, but it looks better when you
* use 'String' rather than 'java.lang.String' as the return type.
*/
ff = c.getDeclaredFields();
for (int i = 0; i < ff.length; i++) {
x = tName(ff[i].getType().getName(), classRef);
}
cn = c.getDeclaredConstructors();
for (int i = 0; i < cn.length; i++) {
Class cx[] = cn[i].getParameterTypes();
if (cx.length > 0) {
for (int j = 0; j < cx.length; j++) {
x = tName(cx[j].getName(), classRef);
}
}
}
mm = c.getDeclaredMethods();
for (int i = 0; i < mm.length; i++) {
x = tName(mm[i].getReturnType().getName(), classRef);
Class cx[] = mm[i].getParameterTypes();
if (cx.length > 0) {
for (int j = 0; j < cx.length; j++) {
x = tName(cx[j].getName(), classRef);
}
}
}
// Don't import ourselves ...
classRef.remove(c.getName());
/*
* Step 2: Start class description generation, start by printing
* out the import statements.
*
* This is the line that goes 'public SomeClass extends Foo {'
*/
for (Enumeration e = classRef.keys(); e.hasMoreElements(); ) {
System.out.println("import "+e.nextElement()+";");
}
System.out.println();
/*
* Step 3: Print the class or interface introducer. We use
* a convienience method in Modifer to print the whole string.
*/
int mod = c.getModifiers();
System.out.print(Modifier.toString(mod));
if (Modifier.isInterface(mod)) {
System.out.print(" interface ");
} else {
System.out.print(" class ");
}
System.out.print(tName(c.getName(), null));
supClass = c.getSuperclass();
if (supClass != null) {
System.out.print(" extends "+tName(supClass.getName(), classRef));
}
System.out.println(" {");
/*
* Step 4: Print out the fields (internal class members) that are declared
* by this class.
*
* Fields are of the form [Modifiers] [Type] [Name] ;
*/
System.out.println("\n\r/*\n\r * Field Definitions.\r\n */");
for (int i = 0; i < ff.length; i++) {
Class ctmp = ff[i].getType();
int md = ff[i].getModifiers();
System.out.println(" "+Modifier.toString(md)+" "+
tName(ff[i].getType().getName(), null) +" "+
ff[i].getName()+";");
}
/*
* Step 5: Print out the constructor declarations.
*
* We note the name of the class which is the 'name' for all
* constructors. Also there is no type, so the definition is
* simplye [Modifiers] ClassName ( [ Parameters ] ) { }
*
*/
System.out.println("\n\r/*\n\r * Declared Constructors. \n\r */");
x = tName(c.getName(), null);
for (int i = 0; i < cn.length; i++) {
int md = cn[i].getModifiers();
System.out.print(" " + Modifier.toString(md) + " " + x);
Class cx[] = cn[i].getParameterTypes();
System.out.print("( ");
if (cx.length > 0) {
for (int j = 0; j < cx.length; j++) {
System.out.print(tName(cx[j].getName(), null));
if (j < (cx.length - 1)) System.out.print(", ");
}
}
System.out.print(") ");
System.out.println("{ ... }");
}
/*
* Step 6: Print out the method declarations.
*
* Now methods have a name, a return type, and an optional
* set of parameters so they are :
* [modifiers] [type] [name] ( [optional parameters] ) { }
*/
System.out.println("\n\r/*\n\r * Declared Methods.\n\r */");
for (int i = 0; i < mm.length; i++) {
int md = mm[i].getModifiers();
System.out.print(" "+Modifier.toString(md)+" "+
tName(mm[i].getReturnType().getName(), null)+" "+
mm[i].getName());
Class cx[] = mm[i].getParameterTypes();
System.out.print("( ");
if (cx.length > 0) {
for (int j = 0; j < cx.length; j++) {
System.out.print(tName(cx[j].getName(), classRef));
if (j < (cx.length - 1)) System.out.print(", ");
}
}
System.out.print(") ");
System.out.println("{ ... }");
}
/*
* Step 7: Print out the closing brace and we're done!
*/
System.out.println("}");
}
/**
***Tname
*/
static String tName(String nm, Hashtable ht) {
String yy;
String arr;
if (nm.charAt(0) != '[') {
int i = nm.lastIndexOf(".");
if (i == -1)
return nm; // It's a primitive type, ignore it.
else {
yy = nm.substring(i+1);
if (ht != null)
没有合适的资源?快使用搜索试试~ 我知道了~
我的代码样例
共166个文件
class:81个
java:80个
classpath:2个
需积分: 0 5 下载量 140 浏览量
2008-03-25
15:41:38
上传
评论
收藏 83KB RAR 举报
温馨提示
本人在长期开发实训中的代码
资源详情
资源评论
资源推荐
收起资源包目录
我的代码样例 (166个子文件)
ReflectClass.class 5KB
Factory.class 3KB
SaleDepart.class 3KB
MyXMLReader2.class 2KB
MyXMLReader.class 2KB
RefProxy.class 2KB
LogInterceptor.class 2KB
Custmer.class 2KB
DynameicProxy.class 2KB
TureInner.class 2KB
method2.class 2KB
method2.class 1KB
DatetTime.class 1KB
Test.class 1KB
Student.class 1KB
TestApp.class 1KB
DynamicSubject.class 1KB
DynamicSubject.class 1KB
Godying.class 1KB
Godyang.class 1KB
People.class 1KB
Client.class 1KB
Customer.class 1KB
Factry.class 1KB
Grape.class 1KB
Custmer.class 1KB
HumanFactory.class 953B
Apple.class 930B
HightSchoolStudent.class 924B
MiddleStudents.class 912B
Trast.class 897B
BusinessObjImpl.class 863B
Strawberry.class 853B
Truck.class 851B
Bus.class 845B
qingchaomangod.class 840B
mingchaomangod.class 840B
Car.class 839B
WomanGod.class 826B
ManGod.class 818B
outer$inner.class 811B
FruitGardener.class 792B
Ref1.class 784B
Woman.class 764B
Array.class 763B
YaMaHaMotoBike.class 763B
Man.class 758B
Int.class 757B
FeMaleAnimal.class 754B
MaleAnimal.class 747B
American.class 744B
Chinese.class 742B
MalePlant.class 742B
FemalePeopel.class 741B
MalePeople.class 735B
BMW.class 730B
PrimaryStudent.class 683B
Case.class 672B
qingchaomang.class 655B
mingchaomang.class 655B
Test.class 622B
gg.class 537B
RealSubject.class 529B
outer.class 353B
BadFruitException.class 353B
BadCarException.class 347B
God.class 289B
Count.class 276B
Action.class 213B
God.class 161B
People.class 156B
Fruit.class 153B
Human.class 146B
Car.class 145B
People.class 145B
Animal.class 145B
Plant.class 142B
BusinessObj.class 141B
foo.class 137B
Vehicle.class 126B
Subject.class 125B
.classpath 226B
.classpath 226B
ReflectClass.java 9KB
Factory.java 3KB
SaleDepart.java 3KB
LogInterceptor.java 2KB
RefProxy.java 2KB
MyXMLReader.java 2KB
Custmer.java 1KB
MyXMLReader2.java 1KB
method2.java 1KB
TestApp.java 1KB
Grape.java 1KB
TureInner.java 961B
DatetTime.java 942B
Client.java 937B
Apple.java 918B
FruitGardener.java 898B
Custmer.java 841B
共 166 条
- 1
- 2
fdxganli
- 粉丝: 1
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Pytorch复现Point-Transformer,用于ShapeNet数据集点云分割
- 【医学影像分析】2D超声图像的分割检测(Ultrasound Nerve Segmentation - Kaggle数据集)
- 嘎嘎香的五款神仙谷歌插件
- .arch书源导入教程.mp4
- 贪心算法介绍及代码示例讲解
- CR13SP35MSI64 Crystal 水晶报表运行组件最后版本64位
- 图像分类数据集:玉米叶是否感染分类数据集(2分类,包含训练集、验证集)
- 小U商城.zip
- 高光谱图像计算机视觉分类图像预处理工具集,包含去除图片无关背景,数据增强,生成标签文件等功能
- (顶刊复现)基于配电网韧性提升的应急移动电源预配置和动态调度(下)-MPS动态调度
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0