zoukankan      html  css  js  c++  java
  • Java反射:new一个宝可梦吧

    最近写Spring Boot的测试用例会发现经常会有用到@RunWith(SpringRunner.class)的设置注解,关于SpringRunner.class的理解也有点似是而非。其实这种写法是Java反射相关的知识,于是动手总结一下常用的反射使用方式。
    假设极客君编写了一个口袋妖怪接口,如下所示:

    package com.cdcgeek.bean;
    
    /**
     * 口袋妖怪接口定义
     */
    public interface PocketMonster {
        // 攻击方法,口袋妖怪天生战斗民族
        public void fight();
    }
    

    然后创建一个皮卡丘类和暴鲤龙类都实现口袋妖怪接口,代码分别如下所示:

    package com.cdcgeek.bean;
    
    /**
     * 皮卡丘类
     *
     * @Author CDCeek
     */
    class Pikachu implements PocketMonster {
        // 名称
        private String name;
        // 等级
        private Integer rank;
    
        public Pikachu() {
        }
        public Pikachu(String name, Integer rank) {
            this.name = name;
            this.rank = rank;
        }
    
        @Override
        public void fight() {
            System.out.println("吃我十万伏特!");
        }
    }
    
    

    同一个包下面的暴鲤龙类,如下所示:

    package com.cdcgeek.bean
    /**
     * 暴鲤龙类
     */
    public class Tyrannosaurus implements PocketMonster {
        // 名称
        private String name;
        // 等级
        private Integer rank;
    
        public Tyrannosaurus() {
        }
        public Tyrannosaurus(String name, Integer rank) {
            this.name = name;
            this.rank = rank;
        }
    
        @Override
        public void fight() {
            System.out.println("破坏死光!");
        }
    }
    

    下面开始使用反射来召唤宝可梦吧,常用的方法有三种,如下所示:
    1.获取反射的类

    Class clazz = class.forName("package com.cdcgeek.bean.Pikachu"); // 可以考虑从配置文件中读取,这样就不用hard code了
    

    2.创建反射获得的类的无参实例

    Pikachu monster = (Pikachu) clazz.newInstance();
    

    3.通过获得有参构造来创建实例

    Constructor c = clazz.getConstructor(String.class, Integer.class);
    
    PocketMonster monster = (PocketMonster) c.newInstance("张无忌", 233);
    

    温故而知新,又是一个美好的夜晚。

  • 相关阅读:
    Codeforces Round #344 (Div. 2) C. Report 其他
    Codeforces Round #344 (Div. 2) B. Print Check 水题
    Codeforces Round #344 (Div. 2) A. Interview 水题
    8VC Venture Cup 2016
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂 中二版
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂
    CDOJ 1279 班委选举 每周一题 div2 暴力
    每周算法讲堂 快速幂
    8VC Venture Cup 2016
    Educational Codeforces Round 9 F. Magic Matrix 最小生成树
  • 原文地址:https://www.cnblogs.com/freephp/p/13894089.html
Copyright © 2011-2022 走看看