庄生晓梦

庄生晓梦迷蝴蝶

博客园 首页 新随笔 联系 订阅 管理
  164 随笔 :: 3 文章 :: 1 评论 :: 74038 阅读

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

那么,如何将类泛型化呢?
这很简单.首先,给他的声明添加一个或者多个类型参数;然后,用相应的类型参数替换所有的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());
        }
    }

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

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

posted on   qwop  阅读(279)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示