`

41、反射的应用

阅读更多

一、反射的应用-->实现框架功能

 

  • 框架,比如:
  • 我做房子卖给用户住,由用户自己安装门窗和空调
  • 我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中
  • 框架与工具有区别,工具类被用户的类调用,而框架则是调用用户提供的类
  • 框架要解决的核心问题,比如:
  • 我在写框架(房子)的时候,你这个用户可能还在上小学
  • 还不会编程呢,我写的框架程序怎样能调用到你以后写的类(门窗)呢?
  • 因为在写程序时无法知道要被调用的类名,
  • 所以,在程序中无法直接new某个类的实例对象,就需要用反射方式来做

二、综合案例

 

    采用配置文件加反射的方式创建ArrayList和HashSet的实例对象,比较运行结果的差异

 

import java.util.*;
import java.io.*;

public class HashCodeTest {

	public static void main(String[] args) throws Exception {
		InputStream is = new FileInputStream("config.properties");
		Properties props = new Properties();
		props.load(is);
		String className = props.getProperty("className");
				
		Collection col = (Collection) Class.forName(className).newInstance();
		
		Student stu1 = new Student("zhangsan",20);
		Student stu2 = new Student("lisi",18);
		Student stu3 = new Student("wangwu",25);
		Student stu4 = new Student("zhangsan",20);
		col.add(stu1);
		col.add(stu2);
		col.add(stu3);
		col.add(stu4);
		col.add(stu1);

		stu1.age = 15;
		
		System.out.println(col.size());
	}
}
class Student
{
	String name;
	int age;
	Student(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	public String toString()
	{
		return name+":"+age;
	}
}

 

分享到:
评论

相关推荐

    C#反射的一些应用

    对于反射贫道也是很陌生的,所以趁现在有时间就把反射看了一下,记下笔记!!!反射的定义:反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型...“外部调用的动态库”)加载程

    net学习笔记及其他代码应用

    41.构造器Constructor是否可被override? 答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 42.是否可以继承String类? 答:String类是final类故不可以继承。 43.try {}里有...

    光纤相位共轭的四通主振荡功率放大器系统实验研究

    应用φ100mm光纤时四通放大系统最大输出能量为6mJ,可以获得的最大反射率为41%,SBS能量阈值约为0.73 mJ;应用φ200mm光纤时可以获得最大激光输出能量为21mJ,可以获得的最大反射率为37%,SBS能量阈值约为1.1mJ.

    Asp.net中的数据绑定Eval和Bind应用示例

    Eval数据绑定应用的反射原理来返回数据。 Bind (双向绑定)双向的数据绑定除了展示数据,还要将界面数据的变动自动写回到绑定的数据源中。 Eval 单向数据绑定,将数据源中的数据展现到界面上。当我们提及数据展现时...

    沃尔沃自动驾驶专利汽车类应用技术专利资料70个合集(英文).zip

    沃尔沃自动驾驶专利汽车类应用技术专利资料70个合集(英文): 10辅助转向系统单元,辅助转向系统,车辆和辅助转向方法.pdf 12用于确定安全车辆轨迹的方法和装置.pdf 13用于控制车辆中的可逆约束系统的启动时间的...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例031 用Switch语句根据消费金额计算折扣 41 实例032 判断用户输入月份的季节 42 2.4 循环控制 43 实例033 使用while与自增运算符循环遍历 数组 43 实例034 使用for循环输出杨辉三角 43 实例035 使用嵌套循环在...

    自定义注解及注解处理器PPT+Demo

    对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,...运行时注解处理器都是通过反射实现,不清楚反射的先去了解下反射的知识。

    Visual C++网络通信编程实用案例精选_7

    38 1.3.1 CAsyncSocket类的组成 38 1.3.2 CAsyncSocket编程模型 39 1.4 CSocket编程技术 41 1.4.1 CSocket类的组成 42 1.4.2 CSocket应用实例——聊天室 43 1.5 WinInet编程技术 52...

    Java经典编程源码基础例程300.zip

    实例078 利用反射重写toString()方法 119 第8章 字符串与包装类 121 实例079 将数字格式化为货币字符串 122 实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1

    狂神说上课笔记未删减 Java基础到技术升级

    14、JavaSE:注解和反射 15、MySQL和JDBC 16、前端:Html5 17、前端:CSS3 18、前端:JavaScript、jQuery 19、JavaWeb 20、MyBatis 21、Spring 22、SpringMVC 23、大前端串讲 24、Vue精讲 25、...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    16.2.5 反射功能 570 16.3 ajax library中的常用类型 571 16.3.1 ajax library对javascript基类型的扩展 571 16.3.2 sys.stringbuilder类 576 16.4 ajax library请求服务端和webservices 577 16.4.1 sys.net...

    java编程常见问题

    33.java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java...当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    16.2.5 反射功能 570 16.3 ajax library中的常用类型 571 16.3.1 ajax library对javascript基类型的扩展 571 16.3.2 sys.stringbuilder类 576 16.4 ajax library请求服务端和webservices 577 16.4.1 sys.net...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    16.2.5 反射功能 570 16.3 ajax library中的常用类型 571 16.3.1 ajax library对javascript基类型的扩展 571 16.3.2 sys.stringbuilder类 576 16.4 ajax library请求服务端和webservices 577 16.4.1 sys.net...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    16.2.5 反射功能570 16.3 ajax library中的常用类型571 16.3.1 ajax library对javascript基类型的扩展571 16.3.2 sys.stringbuilder类576 16.4 ajax library请求服务端和webservices577 16.4.1 sys.net命名空间...

Global site tag (gtag.js) - Google Analytics