第十一章 持有对象

如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。

Java有多种方式保存对象(应该说是对象的引用)。数组是保存一组对象的最有效的方式,如果你想保存一组基本类型数据,也推荐使用这个方式。但是数组具有固定尺寸,而在更一般的情况下,你写程序时并不知道有多少个对象,因此,数组尺寸固定这一限制显得过于受限了。
Java实用类库提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List、Set、Queue和Map。Java容器类都可以自动地调整自己的尺寸。

泛型和类型安全的容器(先来个例子)
package com.chao.chapterElevenHolding;

import java.util.ArrayList;

class Apple{
    private static long counter;
    private final long id = counter++;
    public long id(){
        return id;
    }
}

class Orange{}

public class AppleAndOrangesWithoutGenerics {
    @SuppressWarnings("unckecked")
    public static void main(String[] args) {
        ArrayList apples = new ArrayList();//ArrayList保存的是Object
        for (int i = 0; i < 3; i++) {
            apples.add(new Apple());
        }
        //Not prevented from adding an Orange to apples:
        apples.add(new Orange());
        for (int i = 0; i < apples.size(); i++) {
            ((Apple)apples.get(i)).id();//运行时会报错"Orange cannot be cast to com.chao.chapterElevenHolding.Apple"
        }
    }
}
  • 因为ArrayList保存的是Object,因此你不仅可以通过ArrayListadd()方法将Apple对象放进容器,还可以添加Orange对象,而且无论在编译期还是运行期都不会报错。
  • 在运行期间,当你想要将一个Orange对象转为Apple对象,就会报错了。
  • 泛型就是用来解决这个问题的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值