zoukankan      html  css  js  c++  java
  • 第29条:优先考虑类型安全的异构容器

    一个Set只有一个类型参数,表示它的元素类型,一个Map有两个类型参数,表示它的键和值类型。

    但是有时候,需要更多的灵活性,如,数据库行有任意多的列,希望能以类型安全的方式访问所有的列。办法是将键进行参数化而不是将容器参数化,然后将参数化的键提交给容器,来插入或者获取值。用泛型系统来确保值的类型与它的键相符。

    例子:

    public class Favorites {
        private Map<Class<?>, Object> favorites =
                new HashMap<Class<?>, Object>();
        
        public <T> void putFavorites(Class<T> type, T instance) {
            if(type == null)
                throw new NullPointerException();
            favorites.put(type, type.cast(instance));
        }
        
        public <T> T getFavorites(Class<T> type) {
            return type.cast(favorites.get(type));
        }
    }

    Class对象充当参数化键的部分,从java1.5开始,类的类型不再是简单的Class,而是Class<T>。当一个类的字面文字被用在方法中,来传达编译时和运行时的类型信息,就被称作type token,类型令牌。

    检验代码:

    Favorites f = new Favorites();
    f.putFavorites(String.class, "Java");
    f.putFavorites(Integer.class, 123);
    System.out.println(f.getFavorites(String.class));
    System.out.printf("%x", f.getFavorites(Integer.class));
  • 相关阅读:
    root----TH1
    linux debug
    python基础 文件操作
    linux下挂载硬盘
    安装双系统
    路由器相关
    007-python 获取网卡实时流量(转)
    ssh密钥登录失败(转)
    当while read line 遇到 ssh(转)
    python实用功能之001-邮件发送
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5727543.html
Copyright © 2011-2022 走看看