zoukankan      html  css  js  c++  java
  • 泛型

    一、泛型作为方法参数

    需求:

      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);
        }
    }
  • 相关阅读:
    Qt 模拟一个导航定位系统
    【编程之美】用C语言实现状态机(实用)
    代码面试之链表
    乾坤合一~Linux设备驱动之USB主机和设备驱动
    乾坤合一~Linux设备驱动之I2C核心、总线以及设备驱动
    乾坤合一~Linux设备驱动之终端设备驱动
    乾坤合一~Linux设备驱动之块设备驱动
    蜕变成蝶~Linux设备驱动之watchdog设备驱动
    蜕变成蝶~Linux设备驱动之按键设备驱动
    蜕变成蝶~Linux设备驱动之DMA
  • 原文地址:https://www.cnblogs.com/mpp0905/p/10421271.html
Copyright © 2011-2022 走看看