• 泛型系列教材 (二)- Java 如何设计支持泛型的类


    步骤1:不支持泛型的Stack
    步骤2:支持泛型的Stack
    步骤3:练习-支持泛型的二叉树
    步骤4:答案-支持泛型的二叉树

    步骤 1 : 不支持泛型的Stack

    Stack栈为例子,如果不使用泛型
    当需要一个只能放Hero的栈的时候,就需要设计一个HeroStack
    当需要一个只能放Item的栈的时候,就需要一个ItemStack

    package generic;

       

    import java.util.LinkedList;

    import charactor.Hero;

       

    public class HeroStack {

       

        LinkedList<Hero> heros = new LinkedList<Hero>();

           

        public void push(Hero h) {

            heros.addLast(h);

        }

       

        public Hero pull() {

            return heros.removeLast();

        }

       

        public Hero peek() {

            return heros.getLast();

        }

           

        public static void main(String[] args) {

               

            HeroStack heroStack = new HeroStack();

            for (int i = 0; i < 5; i++) {

                Hero h = new Hero("hero name " + i);

                System.out.println("压入 hero:" + h);

                heroStack.push(h);

            }

            for (int i = 0; i < 5; i++) {

                Hero h =heroStack.pull();

                System.out.println("弹出 hero" + h);

            }

        }

       

    }

    package generic;

       

    import java.util.LinkedList;

    import property.Item;

       

    public class ItemStack {

       

        LinkedList<Item> Items = new LinkedList<Item>();

           

        public void push(Item h) {

            Items.addLast(h);

        }

       

        public Item pull() {

            return Items.removeLast();

        }

       

        public Item peek() {

            return Items.getLast();

        }

           

        public static void main(String[] args) {

               

            ItemStack ItemStack = new ItemStack();

            for (int i = 0; i < 5; i++) {

                Item item = new Item("Item name " + i);

                System.out.println("压入 Item:" + item);

                ItemStack.push(item);

            }

            for (int i = 0; i < 5; i++) {

                Item item =ItemStack.pull();

                System.out.println("弹出 Item" + item);

            }

        }

       

    }

    步骤 2 : 支持泛型的Stack

    设计一个支持泛型的栈MyStack
    设计这个类的时候,在类的声明上,加上一个<T>,表示该类支持泛型。
    T是type的缩写,也可以使用任何其他的合法的变量,比如A,B,X都可以,但是一般约定成俗使用T,代表类型。

    package generic;

       

    import java.util.HashMap;

    import java.util.LinkedList;

    import charactor.Hero;

    import property.Item;

       

    public class MyStack<T> {

       

        LinkedList<T> values = new LinkedList<T>();

           

        public void push(T t) {

            values.addLast(t);

        }

       

        public T pull() {

            return values.removeLast();

        }

       

        public T peek() {

            return values.getLast();

        }

           

        public static void main(String[] args) {

            //在声明这个Stack的时候,使用泛型<Hero>就表示该Stack只能放Hero

            MyStack<Hero> heroStack = new MyStack<>();

            heroStack.push(new Hero());

            //不能放Item

            heroStack.push(new Item());

             

            //在声明这个Stack的时候,使用泛型<Item>就表示该Stack只能放Item

            MyStack<Item> itemStack = new MyStack<>();

            itemStack.push(new Item());

            //不能放Hero

            itemStack.push(new Hero());

        }

       

    }


    更多内容,点击了解: https://how2j.cn/k/generic/generic-generic-class/374.html

  • 相关阅读:
    锚点定位跳转的各种实现方法
    css 布局之定位 相对/绝对/成比例缩放
    闭包,jQuery插件的写法:图片预加载
    mui 常见的效果
    根据浏览器内核判断是web/iOS/android/ipad/iphone 来打开不同的网站或页面
    有字库API方法使用一二
    tab 切换实现方法
    在线图片上传、预览、裁切、放大、缩小之 cropbox.js 的应用
    html + css3 demo
    jsfiddle 使用教程
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615484.html
Copyright © 2020-2023  润新知