• 反射使用案例(2)


    package com.test.reflect;

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.Properties;

    public class Reflect01 {

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

        School s = new School();
        s.build();

        // s.getComplete(new People());
        // s.getComplete(new Equipment());

        Properties pro = new Properties();
        // FileInputStream in = new FileInputStream("E:\workspace\reflect\bin\complete.properties");
        // InputStream in = new BufferedInputStream (new FileInputStream("E:\workspace\reflect\bin\complete.properties"));
        // InputStream in = Reflect01.class.getResourceAsStream("/complete.properties");
        InputStream in = Reflect01.class.getClassLoader().getResource("\complete.properties").openStream();
        pro.load(in);
        for(int i = 0;i < pro.size();i++) {
          String className = pro.getProperty("complete"+(i+1));
          Class<?> clazz = Class.forName(className);
          Complete c = null;
          if(className.contains("People")) {
            c = (People)clazz.newInstance();
            s.getComplete(c);
          }
          if(className.contains("Equipment")) {
            c = (Equipment)clazz.newInstance();
            s.getComplete(c);
          }

        }
      }

    }

    package com.test.reflect;

    public class School {

      public void build() {
        System.out.println("school ok!");
      }

      public void getComplete(Complete c) {
        if(c != null) {
          c.findComplete();
        }
      }
    }

    package com.test.reflect;

    public interface Complete {

      public void findComplete();
    }

    package com.test.reflect;

    public class People implements Complete{

      @Override
      public void findComplete() {
        this.findTeacher();
        enrollStudents();
      }

      public void findTeacher() {
        System.out.println("Here comes the teacher!");
      }

      public void enrollStudents() {
        System.out.println("many students!");
      }
    }

    package com.test.reflect;

    public class Equipment implements Complete{

      @Override
      public void findComplete() {
        buildHall();
        buildStadium();
      }

      public void buildStadium() {
        System.out.println("stadium ok!");
      }

      public void buildHall() {
        System.out.println("have a beautiful hall!");
      }


    }

    *complete.properties

    complete1=com.test.reflect.People
    complete2=com.test.reflect.Equipment

  • 相关阅读:
    [HAOI2006] 旅行
    Vue 2 --v-model、局部组件和全局组件、父子组件传值、平行组件传值
    Flume简介及安装
    MySQL数据目录更改及相关问题解决方案
    更换gcc工具链
    支持多种类型的数据集合作为数据源
    23种设计模式--中介者模式-Mediator Pattern
    PID算法原理 一图看懂PID的三个参数
    内存四区
    趣味算法讲解
  • 原文地址:https://www.cnblogs.com/zzlcome/p/11075030.html
Copyright © 2020-2023  润新知