美文网首页
泛型类与泛型接口

泛型类与泛型接口

作者: 极客天空 | 来源:发表于2024-08-31 16:32 被阅读0次

    一、使用泛型的好处

    • 可以使用多种数据类型,来执行相同的代码
      使用泛型前,如不同类型需要进行方法重载
    public class NonGeneric {
        public int addInt(int x,int y){
            return x+y;
        }
        public float addFloat(float x,float y){
            return x+y;
        }
        //double
        public static void main(String[] args) {
            NonGeneric nonGeneric = new NonGeneric();
            System.out.println(nonGeneric.addInt(1,2));
            System.out.println(nonGeneric.addFloat(1f,2f));
        }
    }
    

    如果还需要double类型的求和,需要重新在重载一个输入是double类型的add方法。其实逻辑都是一样的,只是输入参数类型不一样而已,正好在java中数值类型有个公共的父类:Number

    public class NonGeneric {
        public int addInt(int x,int y){
            return x+y;
        }
        public float addFloat(float x,float y){
            return x+y;
        }
        //使用泛型方法
        public <T extends Number> double add(T t1, T t2) {
            double allsum;
            allsum = t1.doubleValue() + t2.doubleValue();
            return allsum;
        }
        public static void main(String[] args) {
            NonGeneric nonGeneric = new NonGeneric();
            System.out.println(nonGeneric.add(1,2));
            System.out.println(nonGeneric.add(1f,2f));
            System.out.println(nonGeneric.add(1d,2d));
            System.out.println(nonGeneric.add(1L,2L));
        }
    
    • 使用泛型以后,可以指定数据类型,而不需要强制类型转换,以及如果插入错误类型,在编译阶段就可以发现
      以下是未使用泛型,List元素默认类型为Object,需要强制类型转换
    public class NonGeneric4 {
        public NonGeneric4() {
        }
    
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add("mark");
            list.add("OK");
            list.add(100);
    
            for(int i = 0; i < list.size(); ++i) {
                String name = (String)list.get(i);
                System.out.println("name:" + name);
            }
    
        }
    }
    

    运行会抛出异常

    name:mark
    name:OK
    Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        at cn.enjoyedu.generic.needgeneric.NonGeneric4.main(NonGeneric4.java:19)
    

    使用泛型后

    public class NonGeneric4 {
        public static void main(String[] args) {
    //        List list = new ArrayList();
            List<String> list = new ArrayList();
            list.add("mark");
            list.add("OK");
    //        list.add(100);
    
            for (int i = 0; i < list.size(); i++) {
                String name = (String) list.get(i); // 1
                System.out.println("name:" + name);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:泛型类与泛型接口

          本文链接:https://www.haomeiwen.com/subject/hxfnkjtx.html