zoukankan      html  css  js  c++  java
  • 使用泛型实现返回不同类型的对象

    本次功能的实现场景:读取Yaml配置文件,然后将其中的信息转换成指定的对象。
    在这里定义了一个Yaml的工具类,希望工具类的返回对象类型可以根据调用方法时传入的对象类型来定义。

    通过泛型实现

    工具类:

    public class YamlUtil {
        public <T> T readNodeFromYml(Class<T> type) throws YamlException, FileNotFoundException{
    
            File dumpFile = new File(System.getProperty("user.dir") + "/src/main/conf/searchNode.yml");
    
            YamlReader reader = new YamlReader(new FileReader(dumpFile));
    
            return reader.read(type);
    
        }
    }

    调用工具类

    public static void main(String[] args) throws Exception {
    
            YamlUtil util=new YamlUtil();
    
            //读取yaml文件
            SearchNode searchNode = util.readNodeFromYml(SearchNode.class);
            TestStrategy strategy = searchNode.getTestStrategy();
            int num=strategy.add(2, 3);
            System.out.println(num);
        }

    通过<T> 声明告诉JVM返回值定义一个泛型 T
    这里的T只是个占位符的效果,26个字母随便写哪个字母都可以,但一定要是和< >里面相同的字母,这里使用T。
    工具类传入的参数也是T类型的,通过Class<T> type定义一个T类型的参数,最终此方法的作用就成了:传入一个指定类型的对象,然后读取Yaml配置文件后再返回一个此类型的对象。

    使用泛型和使用Object有何不同

    在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
    泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

    由此可见,使用泛型,有2个好处:

    1. 不需要做强制类型转换

    2. 编译时更安全。

  • 相关阅读:
    SLAM+语音机器人DIY系列:(二)ROS入门——3.在ubuntu16.04中安装ROS kinetic
    SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构
    2017年 年计划
    125. Valid Palindrome
    一道多树递归面试题
    顺序表查找和有序表查找
    c++中常见概念、关键字等的区别
    两个栈实现一个队列,两个队列实现一个栈
    150. Evaluate Reverse Polish Notation
    堆排序
  • 原文地址:https://www.cnblogs.com/jpfss/p/9928638.html
Copyright © 2011-2022 走看看