zoukankan      html  css  js  c++  java
  • Java泛型详解

    为什么要用泛型?

      泛型程序的设计主要是为了编写的代码可以被不同的对象重用

      最简单的例子就是ArrayList。我们不能为每个对象写一个ArrayList,为了适用于所有对象,ArrayList被设计为泛型类。有人说不用泛型,用Object不就可以了?但是用Object,意味着在具体对象面前你又要强制类型转换。

    泛型类

      泛型类就是又一个或多个类型变量的类。

      下面定义一个泛型的坐标类。

    public class Point<T> {
    
        private T x;
    
        private T y;
    
        public T getX() {
            return x;
        }
    
        public void setX(T x) {
            this.x = x;
        }
    
        public Point(T x, T y) {
            this.x = x;
            this.y = y;
        }
    
        public Point() {
        }
    }
    View Code

      这样我们可以传入自己需要的类型,如:

    Point<Integer> point1 = new Point<>(1,1);
    Point<Float> point2 = new Point<>(1f,1f);

    泛型方法

      泛型方法是指带有类型参数的方法。

    class ArrayUtil{
        public static <T> T getMiddle(T[] array){
            return array[array.length/2];
        }
    }

    泛型接口

      泛型接口和泛型类用法一样,如:

    public interface JavaBeanCRUD<T> {
    
        T getObjectById(String id);
    
        void addObject(T obj);
    
        void delObjById(String id);
    
        void updateObj(T obj);
    }
    public interface StudentDao extends JavaBeanCRUD<Student> {
    }
    public class StudentDaoImpl implements StudentDao {
        @Override
        public Student getObjectById(String id) {
            return null;
        }
    
        @Override
        public void addObject(Student obj) {
    
        }
    
        @Override
        public void delObjById(String id) {
    
        }
    
        @Override
        public void updateObj(Student obj) {
    
        }
    }

      简单的例子我们能看到泛型确实给我们减少了代码的重写。

    类型变量的限定

       如果我们需要写一个方法,实现获取集合中最大值,即用到compareTo接口。我们可以用extends限制变量的类型。如:

    public static <T extends Comparable> T getMax(T[] array){
            if(array==null || array.length==0)
                return null;
            T max = array[0];
            for(T temp : array){
                if(max.compareTo(temp)<0)
                    max = temp;
            }
            return max;
        }

      extends这里不再是我们熟悉的继承的意思了。这里约束了getMax这个方法传入的对象必须继承Comparable,否则会有编译上的错误。

      一个类型变量或通配符可以有多个限定,限定之间用 ‘&’ 分开即可,如:

      T extends Comparable & Serializable

    
    

      

  • 相关阅读:
    微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed
    腾讯云 docker 镜像 dotnet/core sdk aspnet
    ImageMagick PDF到JPG有时会导致黑色背景
    VS2019 发布单文件
    MySQL 更新语句执行过程 WAL redolog binlog
    MySQL 查询语句执行过程
    让MySQL为我们记录执行流程
    SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束
    初用MySQL Mysql示例库 Navicat15
    OldTrafford after 102 days
  • 原文地址:https://www.cnblogs.com/parryyang/p/6962135.html
Copyright © 2011-2022 走看看