黑马程序员--反射--实现一个简单的集合操作框架_集合框架的反射-程序员宅基地

技术标签: 学习日志  java  黑马程序员  张孝祥  反射 反射基础  

 * 问题:
 * 已知一个Point类,如何从配置文件中获取具体的集合类,将一系列Point对象添加到集合,然后返回该集合?
 * 解决方案:
 * 由于具体集合类未知,所以不能直接编写操作方法,需要依据具体的集合称,生成字节码对象,
 * 再由字节码对象构造一个实例;
 * 这样就可以编写一个简单的框架,在未知具体类的情况下,将Point对象添加到集合中;

 * 关键词: 反射 Class 框架


package zhangweicong.example.heima.reflex;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Properties;

/**
 * 问题:
 * 已知一个Point类,如何从配置文件中获取具体的集合类,将一系列Point对象添加到集合,然后返回该集合?
 * 解决方案:
 * 由于具体集合类未知,所以不能直接编写操作方法,需要依据具体的集合称,生成字节码对象,
 * 再由字节码对象构造一个实例;
 * 这样就可以编写一个简单的框架,在未知具体类的情况下,将Point对象添加到集合中;
 * 关键词: 反射 Class 框架
 */
public class ReflexFrame {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Point p1=new Point(1, 2);
		Point p2=new Point(2, 3);
		Point p3=new Point(3, 4);
		ReflexFrame  reflexFrame= new ReflexFrame();
		Collection collection = reflexFrame.getCollection("config.properties", "className");
		reflexFrame.add(collection, p1,p2,p3);
		
		System.out.println(collection.size()==3?"操作成功":"操作失败");
	}
	public Collection getCollection(String fileName,String property){
		InputStream inStream = null;
		Collection collection=null;
		Properties properties = new Properties();
		try{
			
			inStream=new FileInputStream(fileName);
			properties.load(inStream);
			collection = (Collection )Class.forName(properties.getProperty(property)).newInstance();
			
		}catch(IOException e){
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {		
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}finally{
			
			try{
				if(inStream!=null)
					inStream.close();
			}catch(IOException e){
				e.printStackTrace();
			}
			
		}
		return collection;
	}
	public void add(Collection collection ,Point ... points){
		
		for(Point point : points){
			collection.add(point);
		}
	}
	
}
class Point{
	private int x;
	private int y;
	public Point(int x,int y){
		this.setX(x);
		this.setY(y);
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public String toString(){ return "("+x+","+y+")"; }
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mydream20130314/article/details/39972973

智能推荐

IBM WebSphere Portal宕机或性能低常见问题分析 及解决措施-程序员宅基地

文章浏览阅读247次。使用IBM WebSphere Portal构建企业门户系统是用户比较睿智的一个选择,但是由于Portal产品比较复杂,宕机或性能低也通常是用户较为头疼的问题。经常有客户门户上线后出现页面空白或无法访问,甚至..._websphere应用登录时反应慢

万字胡说自动驾驶仿真测试开发_carsim仿真软件是怎么开发出来的-程序员宅基地

文章浏览阅读1k次,点赞10次,收藏12次。本文总结了自动驾驶仿真平台的架构和一些常用的仿真软件和平台。其中包括自动驾驶仿真软件和平台的主要供应商和相关产品,以及它们的功能和优势。还提到了一些仿真框架和模拟器,如Unity、Unreal Engine、Epic Games、Cognata、OptiX等,以及它们的特点和应用领域。此外,还介绍了一些针对自动驾驶系统的模拟器和仿真平台,如CarMaker、BikeSim、TruckSim、SuspensionSim、VehicleSim等。最后,还提到了一些光学仿真软件和工具,如3DOptix、Optic_carsim仿真软件是怎么开发出来的

leetcode617-java合并二叉树_按照路径合并二叉树java-程序员宅基地

文章浏览阅读103次。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。合并二叉树两个二叉树的对应节点可能存在以下三种情况,对于每种情况使用不同的合并方式。如果两个二叉树的对应节点都为空,则合并后的二叉树的对应节点也为空;如果两个二叉树的对应节点只有一个为空,则合并后的二叉树的对应节点为其中的非空节点;如果两个二叉树的对应节点都不为空,则合并后的二叉树的对应节点的值为两个二叉树的对应节点的值之和,此时需要显性合并两_按照路径合并二叉树java

python中的append()有什么功能,Python:在for循环中列出append()-程序员宅基地

文章浏览阅读346次。In Python, trying to do the most basic append function to a list with a loop:Not sure what i am missing here:a=[]for i in range(5):a=a.append(i)areturns:'NoneType' object has no attribute 'append'解决方案..._python中变量循环append

ext4 学习笔记(十四)[DomHelper常用方法](白鹤翔第一季)_ext4 dom操作一获取元素](白鹤翔-程序员宅基地

文章浏览阅读576次。Ext为了更加的方便我们去操作DOM元素,特提供了DomHelper这个辅助的工具类。下面我们就一起学习下DomHelper首先从API来看,这个类暴露出的public方法并不是特别多。仅仅13个方法而已。如果想生成dom节点,在这里不建议使用原生的方法去生成dom节点,原因是代码量比较大的时候性能比较低、其二是自己组装HTML字符串比较麻烦。在Ext里,DomHelper对象类似一个元素生成_ext4 dom操作一获取元素](白鹤翔

从0到1学android:Android特色开发_从0到1 android开发-程序员宅基地

文章浏览阅读172次。点击上方“罗晓胜”,马上关注,您的支持对我帮助很大上期文章 从0到1学android:碎片Fragment 从0到1学android:数据存储 / 前言 /何为Android特色开发,就是只有在移动设备上开发使用的。例如定位,传感器。微信的摇一摇就是借助的传感器实现的,还有游戏狂野飙车的传感器感应,各种健康计步器等,都是使用传感器开发的特色功能。/ 正文 /Android特色开发位置服务简介基于位置的服务..._从0到1 android开发

随便推点

电大java语言与面向对象程序设计基础_6406Java语言与面向对象程序设计基础A卷答案...-程序员宅基地

文章浏览阅读70次。6406Java语言与面向对象程序设计基础A卷答案试卷编号:6406浙江广播电视大学2006年春季学期开放教育专科期末考试 《Java语言与面向对象程序设计基础》试题答案及评分标准2006年7月一、判断题(每小题2分,共20分)二、单项选择题(每小题2分,共40分)四、编程题(10分)class Person {protected String name; protected char sex...

Vue中使用axios报错request failed with status code 404-程序员宅基地

文章浏览阅读2.3k次。原因:可能是你在一分钟之内,频繁请求,github认为你在攻击他,今天IP地址就不能在请求了。解决办法:重启路由器,或者手机开个热点再去请求。_request failed with status code 404

送学计算机男生什么礼物好,【十大男生喜欢的礼物】男生渴望收到什么礼物_主妇网...-程序员宅基地

文章浏览阅读1.5k次。下周就是一年一度的西方情人节了,有恋人的都已经在想购买什么礼物给自己的爱人了。有心上人的也想着是不是要在情人节表白,想要让自己的男友开心,就一定要想好有什么礼物可以送给对方啦!小编整理了男生最渴望收到的礼物排行榜,希望能够给你一些启发哦!一、钱包钱包对于男人而言是为数不多的几件装饰品之一,而且也非常的实用,不论对方是不是已经有钱包了,你还是可以买一个给他。让对方在日常生活中拿出钱包就想起了你,而且..._给学计算机的男生送什么礼物

Latex ieee paper首页标题下方插入跨分栏图片,并解决脚注问题_ieee 双栏排版 图片横跨-程序员宅基地

文章浏览阅读4.8k次,点赞6次,收藏12次。先上效果图:这是我的一片投到ieee icra 的会议投稿,用的ieee-conference 的latex模版。因为看到一些别的文章(如cvpr的文章比较常见)用了在首页放一大横排图片的排版,感觉很吸引眼球,于是也想模仿。于是各种查资料:https://www.zhihu.com/question/68533668https://tex.stackexchange.com/que..._ieee 双栏排版 图片横跨

查找字符串中重复出现的字符_找出字符串中重复出现的字符-程序员宅基地

文章浏览阅读5.7k次。字符串学习题目:给定一个字符串,查找出所有重复出现的字符思路:遍历字符串,取出一个字符,通过String的indexOf( String s,int starpoint)来判断在字符串中 从这个字符的位置后一位开始是否存在重复字符,如果存在,再通过indexOf(String s)判断这个 字符在已经存储起来的字符中是否存在,存在则不添加,..._找出字符串中重复出现的字符

C++ 优化级别、release、debug和运行速度之间的关系_c++ release-程序员宅基地

文章浏览阅读2.1k次。C++ 优化级别、release、debug和运行速度之间的关系_c++ release

推荐文章

热门文章

相关标签