zoukankan      html  css  js  c++  java
  • EffectiveJava(26)使用泛型类替代普通类

    使用泛型编写类比使用需要在客户端代码中进行转换的类型更加安全,并且对去其他程序员来说更加容易扩展,我们应该将可以用泛型代替的非泛型类优化

    那么,如何将类泛型化呢?
    这很简单.首先,给他的声明添加一个或者多个类型参数;然后,用相应的类型参数替换所有的Object类型
    如:将第六条中的Stack类优化为泛型类
    第六条链接:http://blog.csdn.net/jacxuan/article/details/56851123

        public class StackGeneric<E> {
        private E[] elements;
        private int size = 0;
        private static final int DEFAULT_INITIAL_CAPACITY = 16;
    //消除强制转换的未受检警告
    
        @SuppressWarnings("unchecked")
        public StackGeneric() {
            //不能创建不可具体化的数组
            //elements = new E[DEFAULT_INITIAL_CAPACITY];
            //1.替换 直接绕过创建数组的禁令  会出现一个unchecked cast 警告
            elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
        }
    
        public void push(E e) {
            ensureCapacity();
            elements[size++] = e;
    
        }
    
        public E pop() {
            if (size == 0) {
                throw new EmptyStackException();
            }
            //2.将elements域的类型从E[]改为Object[]
            E result = (E)elements[--size];
            //E result = elements[--size];
            elements[size] = null;
            return result;
        }
    
        public boolean isEmpty() {
            return size == 0;
        }
    
        private void ensureCapacity() {
            if (elements.length == size)
                elements = Arrays.copyOf(elements, 2 * size + 1);
        }
    }

    测试堆栈中弹出的元素转换为大写的方法

    public static void main(String[] args) {
            StackGeneric<String> stack = new StackGeneric<String>();
            for(String arg:args){
                stack.push(arg);
            }
            while(!stack.isEmpty()){
                System.out.println(stack.pop().toUpperCase());
            }
        }

    在上一条中,我们鼓励优先使用列表而非数组,但是实际上并不是总能在泛型中使用列表

    总结:是用泛型比使用需要在客户端代码中进行转换的类型更加安全,更加容易.在设计新类型的时候,要确保他们不需要这种转换就可以使用.这通常意味着要把类做成泛型的.这对于这些类型的新用户来说会更加轻松,又不会破坏现有的客户端.

  • 相关阅读:
    第6 章 : 应用编排与管理:Deployment
    第5 章 : 应用编排与管理:核心原理
    第4 章 : 理解 Pod 和容器设计模式
    第3 章 : Kubernetes 核心概念
    第2 章 : 容器基本概念
    第1 章 : 第一堂“云原生”课
    阿里云原生技术公开课程-讲师记录及视频链接
    Shell中的(),{}几种语法用法-单独总结
    折腾kubernetes各种问题汇总-<1>
    Kubernetes中Deployment部署故障排除
  • 原文地址:https://www.cnblogs.com/qwop/p/6637281.html
Copyright © 2011-2022 走看看