JAVA利用反射模式调用实现类
本文主讲,利用反射模式调用接口的实现类、抽象类的继承子类。下面请听屌丝一一道来
1.第一步在src下创建 com.newer.reflex包
2.在com.newer.reflex包下面建立 IReflex接口,代码如下:
=============================-- start --==================================
package com.newer.reflex;
/**
* 接口反射模式
* @author RSun
* @Date 2012-11-15上午10:07:21
*/
public interface IReflex {
public abstract void display(String str);
}
=============================-- end --==================================
3.在com.newer.reflex包下面建立 AbstractReflex.java抽象类,代码如下:
=============================-- start --==================================
package com.newer.reflex;
/**
* 抽象类反射模式
* @author RSun
* @Date 2012-11-15上午10:05:34
*/
public abstract class AbstractReflex {
public abstract void display(String str);
public void show(){
System.out.println("AbstractReflex非抽象方法show()被调用..." + this.getClass());
}
}
=============================-- end --==================================
4.在com.newer.reflex包下面建立 A.java类, extends AbstractReflex 并实现 IReflex,代码如下:
=============================-- start --==================================
package com.newer.reflex;
/**
* A
* @author RSun
* @Date 2012-11-15上午09:52:34
*/
public class A extends AbstractReflex implements IReflex {
@Override
public void display(String str) {
System.out.println("A类输出:" + str);
}
}
=============================-- end --==================================
5.在com.newer.reflex包下面建立 B.java类, extends AbstractReflex 并实现 IReflex,代码如下:
=============================-- start --==================================
package com.newer.reflex;
/**
* B
* @author RSun
* @Date 2012-11-15上午09:56:05
*/
public class B extends AbstractReflex implements IReflex {
@Override
public void display(String str) {
System.out.println("B类输出:" + str);
}
}
=============================-- end --==================================
6.在com.newer.reflex包下面建立 反射调用工具类ReflexUtil.java类,代码如下:
=============================-- start --==================================
package com.newer.reflex;
import java.util.HashMap;
import java.util.Map;
/**
* 反射调用工具类
* @author RSun
* @Date 2012-11-15上午09:52:18
*/
public class ReflexUtil {
/** A类 **/
public static final int TYPE_A = 1;
/** B类 **/
public static final int TYPE_B = 2;
// 为什么不使用常量?map是为了灵活的CRUD,也可以从数据库配置读取
public static Map<Integer,String> map = new HashMap<Integer,String>();
static{
map.put(TYPE_A, "com.newer.reflex.A");
map.put(TYPE_B, "com.newer.reflex.B");
}
public static AbstractReflex getAbstractReflex(int type){
String clazzName = map.get(type);
try {
return (AbstractReflex)Class.forName(clazzName).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static IReflex getIReflex(int type){
String clazzName = map.get(type);
try {
return (IReflex)Class.forName(clazzName).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
=============================-- end --==================================
7.在com.newer.reflex包下面建立 ReflexTest.java测试类,代码如下:
=============================-- start --==================================
package com.newer.reflex;
/**
* java反射调用类
* @author RSun
* @Date 2012-11-15上午09:45:02
*/
public class ReflexTest {
public static void main(String[] args) {
AbstractReflex re = ReflexUtil.getAbstractReflex(ReflexUtil.TYPE_A);
re.display("调用的是继承类A吗?");
re.show();
System.out.println();
AbstractReflex reb = ReflexUtil.getAbstractReflex(ReflexUtil.TYPE_B);
reb.display("调用的是继承类B吗?");
reb.show();
System.out.println();
IReflex ire = ReflexUtil.getIReflex(ReflexUtil.TYPE_A);
ire.display("调用的是实现类A吗?");
System.out.println();
IReflex ireb = ReflexUtil.getIReflex(ReflexUtil.TYPE_B);
ireb.display("调用的是实现类B吗?");
}
}
=============================-- end --==================================
输出结果如下:
JAVA利用反射模式调用实现类相关推荐
- java反射出抽象类的实现类_java利用反射模式调用实现类
本文主讲,java利用反射模式调用接口的实现类.抽象类的继承子类.下面请听一一道来 1.第一步在src下创建com.newer.reflex包 2.在com.newer.reflex包下面建立IRef ...
- Java利用反射动态加载类实战
package com.web.common.utility.reflector; import java.io.Serializable; import java.lang.reflect.Cons ...
- Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码
Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...
- C# 知识点笔记:IEnumerable的使用,利用反射动态调用方法
IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...
- android利用反射调用截屏api,Android利用反射机制调用截屏方法和获取屏幕宽高的方法...
想要在应用中进行截屏,可以直接调用 View 的 getDrawingCache 方法,但是这个方法截图的话是没有状态栏的,想要整屏截图就要自己来实现了. 还有一个方法可以调用系统隐藏的 screen ...
- java构造函数之间的调用–圆柱体类设计
java构造函数之间的调用–圆柱体类设计 //构造函数之间的调用 import java.util.Arrays; import java.util.Scanner; class Cylinder{p ...
- (C#)利用反射动态调用类成员[转载]
使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name ...
- 利用反射动态调用类成员C#
使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name ...
- C# 利用反射动态调用类成员
使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下: public object InvokeMember( string name, BindingFla ...
最新文章
- 删除链表中全部值为k的节点
- android nfcDemo
- SystemVerilog声明的位置
- C语言程序控制语句——while
- string相关库函数
- Java-类加载内存分析
- dj鲜生-通过邮箱发送加密的激活链接
- Qt 的udpSocket通信
- Mac解压Linux压缩.tar.gz文件
- 浅复制和深复制的区别?//浅拷贝和深拷贝
- 基于DKHadoop的智慧人社服务平台开发案例简述
- 阿里矢量图标库彩色图标(Symbol 引用)
- iOS应用支持IPV6,就那点事儿
- ajax传参中文乱码问题解决
- 【SPFA】【最短路】 腾讯大战360
- Mac清倒废纸篓提示“voicetrigger“在使用中
- miner配置文件详解
- MATLAB | 一文解决各类曲面交线绘制,包含三维隐函数曲面交线
- 【Markdown】Markdown 中的Flow flowchart.js 的基础教程
- 企业微服务治理的解决思路
热门文章
- 在CentOS 7上使用Tripwire监控和检测修改的文件
- LeetCode刷题(100)~唯一摩尔斯密码词
- 给小狗喂骨头,小狗会汪汪叫;给小猫喂食,小猫会喵喵叫。本案例要求编写一个程序模拟饲养员喂食动物的过程
- [附源码]计算机毕业设计Python+uniapp美团外卖微信菜价平台系统的设计与实现9t7op(程序+lw+远程部署)
- 利用STL解决二维数组过大内存溢出问题
- 梦想是什么,梦想在哪里,IT梦!
- 中望3D 2021“草图”之“使用先前平面”
- 第二本书:疯狂人类进化史20190625
- python向EXCEL添加一列数据或指定行列给单元格赋值
- 刷题-洛谷-P1319 压缩技术