• 泛型


    一、泛型作为方法参数

    需求:

      1. 定义一个抽象类Goods,包含抽象方法sell()

      2. 分别定义类Book,Clothes和Shoes继承Goods,并实现sell()方法,输出一句话,如:sell books

      3. 定义一个商品销售类GoodsSeller,模拟销售,包括方法

        public void sellGoods(List<Goods> goods),循环调用List对象的sell()方法

      4.测试

    Goods类

    package com.mpp.generic;
    
    public abstract class Goods {
        public abstract void sell();
    }

    Goods的三个子类:Book,Clothes和Shoes

    public class Book extends Goods {
        @Override
        public void sell() {
            System.out.println("sell books");
        }
    }
    =============================
    public class Clothes extends Goods {
        @Override
        public void sell() {
            System.out.println("sell clothes");
        }
    }
    =============================
    public class Shoes extends Goods {
        @Override
        public void sell() {
            System.out.println("sell shoes");
        }
    }

    GoodSeller类

    package com.mpp.generic;
    
    import java.util.List;
    
    public class GoodSeller {
        public void sellGoods(List<? extends Goods> goods){  //加上? extends后 调用方法处的传参是Goods类或者其子类都允许
            //调用集合中的sell方法
            for(Goods g:goods){
                g.sell();
            }
    
        }
    }

    GoodsTets类

    package com.mpp.generic;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class GoodsTest {
        public static void main(String[] args) {
            //定义book相关的List
            List<Book> books = new ArrayList<>();
            books.add(new Book());
            books.add(new Book());
    
            //定义clothes相关的List
            List<Clothes> clothes = new ArrayList<>();
            clothes.add(new Clothes());
            clothes.add(new Clothes());
    
            //定义shoes相关的List
            List<Shoes> shoes = new ArrayList<>();
            shoes.add(new Shoes());
            shoes.add(new Shoes());
    
            GoodSeller goodSeller = new GoodSeller();
            goodSeller.sellGoods(books);//不匹配出错,修改LsellGoods的传参ist<? extends Goods> goods
        }
    }

    二、自定义泛型类

    自定义一个参数的泛型类

    package com.mpp.generic;
    //泛型类的定义
    public class NumGeneric <T> {
        private T num;
    
        public T getNum() {
            return num;
        }
    
        public void setNum(T num) {
            this.num = num;
        }
        //测试的主方法
        public static void main(String[] args) {
            NumGeneric<Integer> intNum = new NumGeneric<>();
            intNum.setNum(10);
            System.out.println("Integer:"+intNum.getNum());
    
            NumGeneric<Float> floatNum = new NumGeneric<>();
            floatNum.setNum(5.0f);
            System.out.println("Float:"+ floatNum.getNum());
        }
    }

    自定义两个参数的泛型类

    package com.mpp.generic.homework;
    
    public class TwoNumGeneric<T,X> {
        private T num1;
        private X num2;
        public void getNum(T num1,X num2){
            this.num1 = num1;
            this.num2 = num2;
        }
    
        public T getNum1() {
            return num1;
        }
    
        public void setNum1(T num1) {
            this.num1 = num1;
        }
    
        public X getNum2() {
            return num2;
        }
    
        public void setNum2(X num2) {
            this.num2 = num2;
        }
    
        public static void main(String[] args) {
            TwoNumGeneric<Integer,Float> numObj = new TwoNumGeneric<>();
            numObj.getNum(25,2.0f);
            System.out.println("num1是:"+ numObj.getNum1());
            System.out.println("num2是:"+ numObj.getNum2());
    
        }
    }

    三、自定义泛型方法

    package com.mpp.generic;
    
    public class GenericMethod {
        //泛型方法
        public <T extends Number> void printValue(T t){
            System.out.println(t);
        }
    
        public static void main(String[] args) {
            GenericMethod gm = new GenericMethod();
            //泛型方法传入什么就输出什么
    //        gm.printValue("hello word"); //泛型方法限制类型只能是Number子类,这里出现错误
            gm.printValue(124);
            gm.printValue(2.13);
        }
    }
  • 相关阅读:
    个人冲刺计划一周天详细
    软件小创意
    电梯调度小程序。
    敏捷开发一些百科。
    求二维数组的子数组中的最大值!
    求整数数组中子数组最大的和值!
    单元测试我们应该注意什么!
    分析一个文档(英语文章)中各个词出现的频率,并打印频率最高的前10个。
    有感而发
    冲刺一TD美景美图
  • 原文地址:https://www.cnblogs.com/mpp0905/p/10421271.html
Copyright © 2020-2023  润新知