Java-Pojo类转Flex-Vo类

本文介绍了一个用Java编写的工具类,它可以自动生成Flex VO对象,用于与Java POJO类进行映射,简化了开放AMF类映射过程中的手动编码工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=large]
在使用openamf的类映射功能时,一般需要在as端也定义和java pojo类似的对象,用于类的映射。

有关使用openamf的类映射,请见之前的《openAMF自定义类映射(custom-class-mapping)的使用》

如果手工去写这些和java对应的flex vo对象比较麻烦,这里用java写了个简单的as vo对象生成的工具,代码如下:

/**
*
*/
package com.nstar.base.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;

import org.apache.commons.lang.StringUtils;


/**
* @author Administrator
*
*/
public class VoUtils {
public VoUtils(){}

//根据java类对象的类型返回vo类型
public static String getClassType(Class c){
String typeName = c.getSimpleName();

if (typeName.equals("String") || typeName.equals("Date") || typeName.equals("Boolean")) {
return typeName;
}else if (typeName.equals("BigDecimal") || typeName.equals("Decimal") ||
typeName.equals("Double")) {
return "Number";
}else if (typeName.equals("Integer")) {
return "int";
}else {
return "*";//其它类型的设置为未知类型,此处由自己去补充完善,并不建议使用"*"
}

}
//重复c字符count次,用于格式化生成的as文件
public static String repeat(String c, int count){
String temp = "";
for(int i = 0;i<count ;i++){
temp += c;
}

return temp;
}
/**
* 生成as文件
* @param pojoName java对象名称
* @param packageName flex中vo对象的包名
* @throws ClassNotFoundException
* @throws IOException
*/
public static void generateAsFile(String pojoName, String packageName, String folder)
throws ClassNotFoundException, IOException {
Class c = Class.forName(pojoName);
Field[] fields =c.getDeclaredFields();

//as的vo对象名称结尾加上VO标志
File f = new File(folder+c.getSimpleName()+"VO.as");
BufferedWriter bw = new BufferedWriter(
new FileWriter(f));
//包名,没有设置包名就取和java pojo一样的包名
if (StringUtils.isEmpty(packageName)){
bw.write("package "+c.getPackage().getName()+"\n{\n");
}else{
bw.write("package "+packageName+"\n{\n");
}

//写类
bw.write(repeat(" ",4)+"public class "+c.getSimpleName()+"VO\n");
bw.write(repeat(" ",4)+"{\n");

//写属性
for(int i=0;i<fields.length;i++){
Class fieldType = fields[i].getType();
String typeName = getClassType(fieldType);
bw.write(repeat(" ",8)+"private var _"+fields[i].getName()+":"+typeName+";\n");
}

bw.write("\n\n\n");
//写空的构造函数
bw.write(repeat(" ",8)+"public function "+c.getSimpleName()+"VO(){}\n\n");

//写 setter/getter 方法
for(int i=0;i<fields.length;i++){
Class fieldType = fields[i].getType();
String typeName = getClassType(fieldType);
//setter
bw.write(repeat(" ",8)+"public function set "+fields[i].getName()+"(value:"+typeName+"):void{\n");
bw.write(repeat(" ",12)+"this._"+fields[i].getName()+" = value;\n");
bw.write(repeat(" ",8)+"}\n\n");
//getter
bw.write(repeat(" ",8)+"public function get "+fields[i].getName()+"():"+typeName+"{\n");
bw.write(repeat(" ",12)+"return this._"+fields[i].getName()+";\n");
bw.write(repeat(" ",8)+"}\n\n\n");

}
bw.write(repeat(" ",4)+"}\n");
bw.write("}");
bw.close();
}

//测试,写了个测试
public static void main(String[] args) throws ClassNotFoundException, IOException {
// TODO Auto-generated method stub
String[] pojos = {
"com.nstar.model.orderexpress.Area",
"com.nstar.model.orderexpress.FoodType",
"com.nstar.model.orderexpress.Holiday",
"com.nstar.model.orderexpress.ItemSpec",
"com.nstar.model.orderexpress.ItemSpecType",
"com.nstar.model.orderexpress.Menu2Rest",
"com.nstar.model.orderexpress.OrderInfo",
"com.nstar.model.orderexpress.OrderInfoExp",
"com.nstar.model.orderexpress.OrderMenu",
"com.nstar.model.orderexpress.OrderState",
"com.nstar.model.orderexpress.OrderType",
"com.nstar.model.orderexpress.Repository",
"com.nstar.model.orderexpress.RepositoryType",
"com.nstar.model.orderexpress.RestInfo",
"com.nstar.model.orderexpress.UserInfo",
"com.nstar.model.orderexpress.UserLevel",
"com.nstar.model.orderexpress.UserType"
};
for(int i=0;i<pojos.length;i++){
//Class c = Class.forName(pojos[i]);
//System.out.println("registerClassAlias('"+pojos[i]+"',com.nstar.orderexpress.vo."+c.getSimpleName()+"VO);");
VoUtils.generateAsFile(pojos[i],"com.nstar.orderexpress.vo","C:/temp/");
}

}

}

测试时可以随便找个Java对象来测试,下面是其中生成的一个文件(OrderTypeVO)的内容:

package com.nstar.orderexpress.vo
{
public class OrderTypeVO
{
private var _orderTypeId:String;
private var _name:String;
private var _remarks:String;

public function OrderTypeVO(){}

public function set orderTypeId(value:String):void{
this._orderTypeId = value;
}

public function get orderTypeId():String{
return this._orderTypeId;
}


public function set name(value:String):void{
this._name = value;
}

public function get name():String{
return this._name;
}


public function set remarks(value:String):void{
this._remarks = value;
}

public function get remarks():String{
return this._remarks;
}


}
}[size=large][/size]


本文是转载自网友的,我们自己可以在此基础上做一些修改使其成为我们的工具类。其实这种做法之前在写Mysql部分的监控时也曾用到了。[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值