xml与反射应用(一)

感觉先交个作业能来点儿斗志,先写一部分哈哈

我们的目的是:将下面的xml文件解析得到类名,方法名,类型和值(不知type、value的类型及个数),并且对value进行加法操作

<funs>
	<fun class="zhengshu" method="add">
		<para type="int" value="32"></para>
		<para type="int" value="2"></para>
	</fun>
</funs>

经过(超级超级艰辛的过程)分析得到,首先我们完成一个para类,实现对type,value的类型,由String类型转换成我们需要的类型。
para是解决这个问题最基础的一个类,他的作用很单一很绝对,仅仅是将xml文件内的para标签下的内容进行处理

  • 关于将String类型转换成我们需要的类型可以用HashMap,也可以用逻辑语句,这里最终用了逻辑语句,当中也给出了HashMap的操作。
  • 初步版本仅仅处理了type为八大基本类型这一情况
	//操作前
	private String type;
	private String value;
	//操作后
	private Class<?> types;
	private Object values;
	
package com.mec.aboutTry;

import java.util.HashMap;

public class para {
	private String type;
	private String value;
	private Class<?> types;
	private Object values;
	
	public para() {
	}	
//	HashMap<String, Class> typeMap = new HashMap<> ();
//	这里是提前的HashMap版本。
//	@SuppressWarnings("rawtypes")
//	private final static HashMap<String, Class> typeMap;
//	static {
//		typeMap = new HashMap<>();
//		typeMap.put("int", int.class);
//		typeMap.put("double", double.class);
//		typeMap.put("char", char.class);
//		typeMap.put("short", short.class);
//		typeMap.put("boolean", boolean.class);
//		typeMap.put("byte", byte.class);
//		typeMap.put("long", long.class);
//	}
	//type 的string类型变成type类型
	public void tStringToType(String type) {
		if(type.equals("int")) {
			this.types = int.class;
		}
		if(type.equals("double")) {
			this.types = double.class;
		}
		if(type.equals("short")) {
			this.types = short.class;
		}
		if(type.equals("long")) {
			this.types = long.class;
		}
		if(type.equals("boolean")) {
			this.types = boolean.class;
		}
		if(type.equals("byte")) {
			this.types = byte.class;
		}
		if(type.equals("char")) {
			this.types = char.class;
		}
		if(type.equals("long")) {
			this.types = long.class;
		}
	}
	
	
	//value的string类型变成type类型
	public void vStringToType(String value) {
		if(type.equals("int")) {
			this.values = int.class;
		}
		if(type.equals("double")) {
			this.values = double.class;
		}
		if(type.equals("short")) {
			this.values = short.class;
		}
		if(type.equals("long")) {
			this.values = long.class;
		}
		if(type.equals("boolean")) {
			this.values = boolean.class;
		}
		if(type.equals("byte")) {
			this.values = byte.class;
		}
		if(type.equals("char")) {
			this.values = char.class;
		}
		if(type.equals("long")) {
			this.types = long.class;
		}		
		
	}
	
	
	public String toString() {
		return "para [type=" + types + ", value=" + values + "]";
	}
//用
	public Class<?> getType() {
		return types;
	}

	public void setType(String type) {
		tStringToType(type);
		this.type = type;
	}

	public Object getValue() {
		return values;
	}

	public void setValue(String value) {
		vStringToType(value);
		this.value = value;
	}
///
	public Class<?> getTypes() {
		return types;
	}

	public void setTypes(Class<?> types) {
		this.types = types;
	}

	public Object getValues() {
		return values;
	}

	public void setValues(Object values) {
		this.values = values;
	}
	    

}

由HashMap实现的操作如下
而且这里处理了当type不是八大基本类型的操作

package com.mec.xml_reflect.core;

import java.util.HashMap;
import java.util.Map;

public class Para {
	private static final Map<String, Class<?>> typeMap;
	
	static {
		typeMap = new HashMap<>();
		typeMap.put("int", int.class);
		typeMap.put("string", String.class);
		typeMap.put("byte", byte.class);
		typeMap.put("char", char.class);
		typeMap.put("short", short.class);
		typeMap.put("long", long.class);
		typeMap.put("float", float.class);
		typeMap.put("double", double.class);
		typeMap.put("boolean", boolean.class);
	}
	
	private Class<?> type;
	private String name;
	private Object value;
	
	public Para() {
	}

	public void setType(String typeName) {
		Class<?> paraType = typeMap.get(typeName);
		if (paraType == null) {
			try {
				paraType = Class.forName(typeName);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
		type = paraType;
	}
	
	public Class<?> getType() {
		return type;
	}
	
	public void setValue(String str) {
		value = parseValue(str);
	}
	
	public Object getValue() {
		return value;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	private Object parseValue(String str) {
	//对不属于八大基本类型的type,返回null
		Object result = null;

		if (type.equals(String.class)) {
			return str;
		}
		if (type.equals(char.class)) {
			return str.charAt(0);
		}
		if (type.equals(short.class)) {
			return Short.valueOf(str);
		}
		if (type.equals(long.class)) {
			return Long.valueOf(str);
		}
		if (type.equals(float.class)) {
			return Float.valueOf(str);
		}
		if (type.equals(double.class)) {
			return Double.valueOf(str);
		}
		if (type.equals(boolean.class)) {
			return Boolean.valueOf(str);
		}
		if (type.equals(int.class)) {
			return Integer.valueOf(str);
		}
		
		return result;
	}
	
}

好嘞先收摊,未完尽快续…

1 简述反射机制 反射是一种间接操作目标对象的机制,在程序程序运行时获取或者设置对象自身的信息。 只要给定类的名字,就可以通过反 射获取类的所有信息,接着便能调用它的任何一个方法和属性。 反射的步骤有哪些? 第一:获取类加载器:ClassLoader loader=Thread.currentThread().getContextClassLoader();//获取当 前线程的上下文类加载器 第二:通过类加载器获取类 Class clazz=loader.loadClass("com.taobao.reflect.car")//通过对象的全称限 定来获取对象。 第三:通过clazz获得构造函数:Constructors cons=clazz.getDeclaraedConstructors(Class[]null);//调 用默认的构造函数 第四:然后通过构造函数构造对象:Car car=(Car)cons.newInstance();//获取类的默认构造函数对象并实例化对 象。 第五:得到car对象,然后调用car的方法:Method methd =car.getMethod("setName","String.class");//method声明,并指向car的setName这个方法,得到setName方 法。 2 用反射机制能干什么事 刚开始在使用jdbc时侯,在编写访问数据库时写到想吐,有八个表,每个表都有增删改查中操作,那时候还不知道有反射 机制这个概念,所以就对不同的表创建不同的dao类,这样不仅开发速率慢,而且代码冗余的厉害,最要命的是看着差不多 的,然后直接复制修改,由于容易犯各种低级的错误(大小写啊,多一个或少一个字母啊……),一个错误就可以让你找半天。 有了java反射机制,什么都好办了,只需要写一个dao类,四个方法,增删改查,传入不同的对象,就OK啦,无需为每一个 表都创建dao类,反射机制会自动帮我们完成剩下的事情,这就是它的好处。说白了,反射机制就是专门帮我们做那些重复的 有规则的事情,所以现在很多的自动生成代码的软件就是运用反射机制来完成的,只要你按照规则输入相关的参数,所以低 级的程序员慢慢的就被抹杀了,为什么?因为代码都不用写了,随便一个人都会开发,还要程序员干什么啊?所以我们只有 一条出路,那就是努力努力再努力,成为高级程序员,专门开发傻瓜软件,让其他程序员 到一边凉快去~ 3 使用过哪些xml解析 XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。 XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。 XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是 官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。
1 XML 简介...................................................................................................................... 1 2 XML 的用途.................................................................................................................. 3 3 XML 树结构.................................................................................................................. 5 4 XML 语法规则.............................................................................................................. 8 5 XML 元素....................................................................................................................11 6 XML 属性....................................................................................................................13 7 XML 验证....................................................................................................................17 8 XML 验证器................................................................................................................19 9 XML 浏览器支持........................................................................................................19 10 查看XML 文件........................................................................................................20 11 使用 CSS 显示XML............................................................................................21 12 使用XSLT 显示XML .............................................................................................23 13 XML 解析器..............................................................................................................25 14 XML DOM ...............................................................................................................27 15 XML to HTML.........................................................................................................31 16 XMLHttpRequest 对象......... 17 XML 应用程序..........................................................................................................36 18 XML 命名空间(XML Namespaces )..............................................................40 19 XML CDATA............................................................................................................43 20 XML 编码..................................................................................................................45 21 XML DOM 高级......................................................................................................47 22 XML Don't...............................................................................................................49
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值