首先是模板类的父类 在这里进行赋值 加载等相关操作 ↓
package door.fight;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Map;
@SuppressWarnings("unchecked")
public abstract class GameData extends HObject implements Cloneable
{
/**
* 设置对象的值
*
* @param key
* @param value
* @return
*/
public boolean setValue(String key, String value)
{
try
{
if (value.length() == 0)
value = "-1";
Field field = getClass().getField(key);
Class<?> class1 = field.getType();
if (class1 == Integer.TYPE)
field.setInt(this, Integer.parseInt(value));
else if (class1 == Integer.class)
field.set(this, (Integer) Integer.valueOf(value));
else if (class1 == Long.TYPE)
field.setLong(this, Long.parseLong(value));
else if (class1 == Long.class)
field.set(this, Long.valueOf(value));
else if (class1 == Boolean.TYPE)
field.setBoolean(this, Boolean.getBoolean(value));
else if (class1 == Boolean.class)
field.set(this, Boolean.valueOf(value));
else if (class1 == Float.TYPE)
field.setFloat(this, Float.valueOf(value).floatValue());
else if (class1 == Float.class)
field.set(this, Float.valueOf(value));
else if (class1 == Double.TYPE)
field.setDouble(this, Double.valueOf(value).doubleValue());
else if (class1 == Double.class)
field.set(this, Double.valueOf(value));
else if (class1 == (java.lang.String.class))
field.set(this, value);
else if (class1 == Date.class)
{
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
try
{
field.set(this, sdf.parse(value));
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (ParseException e)
{
e.printStackTrace();
}
}
return true;
}
catch (NoSuchFieldException nosuchfieldexception)
{
nosuchfieldexception.printStackTrace();
}
catch (SecurityException securityexception)
{
securityexception.printStackTrace();
}
catch (IllegalAccessException illegalaccessexception)
{
illegalaccessexception.printStackTrace();
}
return false;
}
/**
* 初始化多个对象
*
* @param s
* @param GameDataClass
* @param arraylist
*/
public static final void initObjects(String s,
Class<? extends GameData> GameDataClass,
ArrayList<GameData> arraylist)
{
String as[] = s.split("\r\n");
String as1[] = as[1].split("\t");
for (int i = 2; i < as.length; i++)
{
if (as[i].length() < 1 && i < as.length - 1)
{
System.err.println(GameDataClass.getSimpleName()
+ " read the configuration file data "
+ "failed on line " + (i + 1)
+ ", because the file does "
+ "not match the number of data and the "
+ "number of columms");
continue;
}
String as2[] = as[i].split("\t");
if (as2.length < 1 || null == as2[0] || as2[0].equals(""))
{
System.err.println(GameDataClass.getSimpleName()
+ " read the configuration file data "
+ "failed on line " + (i + 1)
+ ", because this line of data or "
+ "incomplete data length of zero");
continue;
}
GameData gameobject = null;
try
{
gameobject = GameDataClass.newInstance();
}
catch (IllegalAccessException illegalaccessexception)
{
illegalaccessexception.printStackTrace();
}
catch (InstantiationException instantiationexception)
{
instantiationexception.printStackTrace();
}
if (gameobject == null)
break;
initObject(gameobject, as1, as2);
arraylist.add(gameobject);
}
}
/**
* 初始化单个对象的值
*
* @param gameobject
* @param as
* 属性
* @param as1
* 值
*
*/
public static void initObject(GameData gameobject, String as[],
String as1[])
{
for (int i = 0; i < as1.length; i++)
if (as1[i].length() > 0)
{
if (as1[i].length() > 2 && as1[i].charAt(0) == '"'
&& as1[i].charAt(as1[i].length() - 1) == '"')
as1[i] = as1[i].substring(1, as1[i].length() - 1);
gameobject.setValue(new String(as[i]), new String(as1[i]));
}
}
/** 复制对象 */
public Object clone()
{
GameData gameData = null;
try
{
gameData = (GameData) super.clone();
}
catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
return gameData;
}
public static void initObject(GameData gameobject, ArrayList<String> s)
{
for (int i = 0; i < s.size(); i++)
{
String[] attris = s.get(i).split("=");
gameobject.setValue(attris[0], attris[1]);
}
}
/**
* 初始化一个模型对象
*/
public static Object loadObject(GameData o, Map<String, String> scrAttrs)
{
Class<? extends GameData> clazz = o.getClass();
while (clazz != GameData.class)
{
Field[] fields = clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++)
{
Field field = fields[i];
// 字段可访问性
boolean accessFlag = field.isAccessible();
// 字段可访问性为true
field.setAccessible(true);
// 字段名字
String varName = field.getName();
if (null != scrAttrs.get(varName))
{
o.setValue(varName, scrAttrs.get(varName).trim());
// 字段类型
// String type = field.getGenericType().toString();
// // 字段值
// String value = scrAttrs.get(varName).trim();
// try
// {
// // 设置值,暂时用到int,java.lang.String,long,double
// if (value!=null&&value.length()>0)
// {
//
// if (type.equals("int"))
// field.set(o, Integer.parseInt(value));
// else if (type.equals("class java.lang.String"))
// field.set(o, new String(value));
// else if (type.equals("long"))
// field.set(o, Long.parseLong(value));
// else if (type.equals("double"))
// field.set(o, Double.parseDouble(value));
// }
// }
// catch (IllegalAccessException e)
// {
// e.printStackTrace();
// }
}
// 恢复该字段可访问性
field.setAccessible(accessFlag);
}
// 获取父类Class
clazz = (Class<GameData>) clazz.getSuperclass();
}
return o;
}
/** 根据物品属性明得到属性索引index */
public static int getIndex(String indexName, String[] arry)
{
for (int i = 0; i < arry.length; i++)
{
if (arry[i].equalsIgnoreCase((indexName)))
{
return i;
}
}
return -1;
}
}
子类模板内容 保证变量名和配置表中的字段一致 ↓
package door.model;
import door.fight.GameData;
/**
* 机器人模板
*/
public class RobotModel extends GameData
{
/** 名次 */
public String MingCiMax = null;
public String xgID = null;
public int XXnumber = 0;
public String LvFW = null;
public double addGongXX = 0.0d;
public double fyXX = 0.0d;
public double bloodXX = 0.0d;
public double speedXX = 0.0d;
public double mzXX = 0.0d;
public double sbXX = 0.0d;
public double bjXX = 0.0d;
public double bkXX = 0.0d;
public String BOSSID = null;
public int BS_number = 0;
public String LvFWB = null;
public double addGongBX = 0.0d;
public double fyBX = 0.0d;
public double bloodBX = 0.0d;
public double speedBX = 0.0d;
public double mzBX = 0.0d;
public double sbBX = 0.0d;
public double bjBX = 0.0d;
public double bkBX = 0.0d;
public void init()
{
}
public String getMingCiMax()
{
return MingCiMax;
}
public String getXgID()
{
return xgID;
}
public int getXXnumber()
{
return XXnumber;
}
public String getLvFW()
{
return LvFW;
}
public double getAddGongXX()
{
return addGongXX;
}
public double getFyXX()
{
return fyXX;
}
public double getBloodXX()
{
return bloodXX;
}
public double getSpeedXX()
{
return speedXX;
}
public double getMzXX()
{
return mzXX;
}
public double getSbXX()
{
return sbXX;
}
public double getBjXX()
{
return bjXX;
}
public double getBkXX()
{
return bkXX;
}
public String getBOSSID()
{
return BOSSID;
}
public int getBS_number()
{
return BS_number;
}
public String getLvFWB()
{
return LvFWB;
}
public double getAddGongBX()
{
return addGongBX;
}
public double getFyBX()
{
return fyBX;
}
public double getBloodBX()
{
return bloodBX;
}
public double getSpeedBX()
{
return speedBX;
}
public double getMzBX()
{
return mzBX;
}
public double getSbBX()
{
return sbBX;
}
public double getBjBX()
{
return bjBX;
}
public double getBkBX()
{
return bkBX;
}
}
最后 在启动时加载 ↓
/** 加载机器人模板 */
public static void loadRobotModel(String[] arg)
{
String[] indexs = StringKit.split(arg[1], "|");
Map temp = null;
RobotModel rbm = null;
for (int i = 2; i < arg.length; i++)
{
String str = arg[i];
if (str.equals(""))
{
continue;
}
String[] arry = StringKit.split(str, "|");
temp = new HashMap();
for (int j = 0; j < indexs.length; j++)
{
temp.put(indexs[j], arry[j]);
}
rbm = new RobotModel();
GameData.loadObject(rbm, temp);
rbm.init();
}
}