• java 反射实现框架功能


    框架与框架要解决的核心问题

    我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。

    框架要解决的核心问题

    我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的框架程序怎样能调用到你以后写的类(门窗)呢?

    因为在写才程序时无法知道要被调用的类名,所以,在程序中无法直接new 某个类的实例对象了,而要用反射方式来做。

    综合案例

    先直接用new语句创建ArrayList和HashSet的实例对象,演示用eclipse自动生成 ReflectPoint类的equals和hashcode方法,比较两个集合的运行结果差异。

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

    引入了elipse对资源文件的管理方式的讲解。

    Eg:

    package july78javaEnhance;

    //利用资源文件加上反射操作!

    import java.io.FileInputStream;

    import java.io.InputStream;

    import java.util.Collection;

    import java.util.Properties;

    public class ReflectPropertiesDemo8 {

        public static void main(String[] args) throws Exception {

            //写出来的三个全部是可以的,但是相对又不一样!

           

            //可以的绝对路径InputStream ips = new FileInputStream("src/july78javaEnhance/MyPro.properties");//将这个文件加载进来!

           

            //可以的InputStream ips = ReflectPropertiesDemo8.class.getResourceAsStream("MyPro.properties");

            InputStream ips = ReflectPropertiesDemo8.class.getClassLoader().getResourceAsStream("july78javaEnhance/MyPro.properties");

            Properties pro = new Properties();

            pro.load(ips);

            ips.close();

           

            String className = pro.getProperty("className");

           

            Collection col = (Collection) Class.forName(className).newInstance();

           

            //Collection col = new TreeSet();//这样的做法也可以但是现在不想通过在等号右边具体的新建名称来做!

           

            col.add(12);

            col.add(13);

            col.add(12);

            col.add(23);

            col.add(36);

            System.out.println(col);

        }

    }

  • 相关阅读:
    《CLR via C#》读书笔记 之 基元类型、引用类型和值类型 明
    《CLR via C#》读书笔记 之 类型和成员基础 明
    《CLR via C#》读书笔记 之 方法 明
    设计模式基础(一):UML中关系图解 明
    【转载】c#类的成员初始化顺序 明
    《CLR via C#》读书笔记 之 接口 明
    《CLR via C#》读书笔记 之 事件 明
    《CLR via C#》读书笔记 之 参数 明
    三塔DP——http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3554
    二分求幂——http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3549
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11137705.html
Copyright © 2020-2023  润新知