Java泛型的一点用法(转)
1、一个优秀的泛型,建议不要这样写
public static <K, V> Map<K, V> getMap(String source, String firstSplit, String secondSplit)
建议可以这样写
public static <K, V> Map<K, V> getMap(List<K> keys, List<V> values)
或类似
public class MapItem<K, V>
{
public K key;
public V value;
}
public static <K, V> Map<K, V> getMap(List<MapItem<K, V>> items)
也就是即然你是泛型,你就泛吧,最好不要混用。即然混用了,“泛”就失去意义了,那还是议直接一点
public static Map<String, Integer> getMap(String source, String firstSplit, String secondSplit) {
Map<String, Integer> result = new HashMap<String, Integer>();
if (source.equals("")) {
return result;
}
String[] strings = source.split(firstSplit);
for (int i = 0; i < strings.length; i++) {
String[] tmp = strings[i].split(secondSplit);
if (tmp.length == 2) {
result.put(tmp[0], Integer.parseInt(tmp[1]));
}
}
return result;
}
2、泛型一般具有“通用”性,如果我们真想这么做,是否可以这样呢?
//使用泛型,用于具体类型当中
public static Map<String, Integer> getMap(String source, String firstSplit, String secondSplit){
String[] strings = source.split(firstSplit);
ArrayList<MapItem<String, Integer>> items = new ArrayList<MapItem<String, Integer>>();
for (int i = 0; i < strings.length; i++) {
String[] tmp = strings[i].split(secondSplit);
if (tmp.length == 2) {
MapItem<String, Integer> item = new MapItem<String, Integer>();
item.key = tmp[0];
item.value = Integer.parseInt(tmp[1]);
items.add(item);
}
}
return toMap(items);
}
//使用泛形,以提供通用性封装
public static <K, V> Map<K, V> toMap(List<MapItem<K,V>> items){
Map<K, V> result = new HashMap<K, V>();
for (MapItem<K, V> item : items) {
result.put(item.key, item.value);
}
3、有时候一个东西总感觉不好用时,是不是本来我们就使用过度了或设计不足,而偏离了其本质?我个人觉得Java和C#的泛型都很好,提高了编码的效率和可复用性。
http://www.cnblogs.com/magialmoon/p/3803114.html
Java泛型的一点用法(转)的更多相关文章
- Java泛型总结---基本用法,类型限定,通配符,类型擦除
一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...
- Java 泛型 四 基本用法与类型擦除
简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...
- 关于Java泛型"擦除"的一点思考
头次写博客,想说的东西不难,关于泛型的疑问,是前一阵在学习jackson中遇到的. 下面就把我所想到的.遇到的,分享出来. 泛型是JDK1.5后的一个特性,是一个参数类型的应用,可以将这个参数声明在类 ...
- Java泛型用法总结
普通泛型 class Point< T>{ // 此处可以随便写标识符号,T是type的简称 private T var ; // var的类型由T指定,即:由外部指定 public T ...
- JAVA 泛型 通配符? extends super限定,实例区分extends super限定的作用用法
java泛型中的关键字 ? 表示通配符类型 <? extends T> 既然是extends,就是表示泛型参数类型的上界,说明参数的类型应该是T或者T的子类. <? super T& ...
- 关于Java泛型实现原理的思考与一般用法示例总结
面向对象的一个重要目标是对代码重用的支持.支持这个目标的一个重要机制就是泛型机制.在1.5版本之前,java并没有直接支持泛型实现,泛型编程的实现时通过使用继承的一些基本概念来完成的. 这种方式的局限 ...
- Java泛型总结
1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...
- java泛型的讲解
java泛型 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指 ...
- Java 泛型完全解读
对于泛型的使用我想大家都非常熟悉,但是对于类型擦除,边界拓展等细节问题,可能不是很清楚,所以本文会重点讲解一下:另外对泛型的了解其实可以看出,一个语言特性的产生逻辑,这对我们平时的开发也是非常有帮助的 ...
随机推荐
- MySQL:Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.解决办法
今天在navicat上操作mysql数据库表,突然没有响应了.随后重启,mysql服务也终止了.随后启动服务,检查表,发现一张表卡没了,就重新添加一张表.报了一个错: Error : Tablespa ...
- JavaScript瀑布流代码
function osCode(){ var boxWidth = parseInt($(".item").css('width')), marginTop = parseInt( ...
- 【JQ成长笔记】jQuery Validate验证插件
validate是一款很好的jq插件,提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同 ...
- Linux(CentOS6.5) 开放端口,配置防火墙
打开配置文件 [root@localhost ~]# vi /etc/sysconfig/iptables 正确的配置文件 # Firewall configuration written by sy ...
- J2SE知识点摘记(二十一)
实现原理 前面已经提了一下Collection的实现基础都是基于数组的.下面我们就已ArrayList 为例,简单分析一下ArrayList 列表的实现方式.首先,先看下它的构造函数. 下列表格是在S ...
- Cortex-M3学习日志(二)-- 按键实验
有输出总会有输入,今天测试一下按键的功能,第一节已经说过了与GPIO端口相关的寄存器,这里不在重复,想要从端口读取数据,首先把FIODIR这个寄存器设置为输入,再从FIOPIN寄存器读取数据就可以了, ...
- [LeetCode][Python]ZigZag Conversion
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/zigzag- ...
- [虚拟化/云] kvm的架构分析
预备知识 1. 客户机物理页框到宿主机虚拟地址转换 http://blog.csdn.net/zhuriyuxiao/article/details/8968781 http://www.tuicoo ...
- saiku中默认级别all的国际化
在制作saiku的schema文件的时候,当你选择层次的属性hasAll为true的时候,系统默认会为你的层次添加一个“(all)”级别,你无法给它增加一个caption属性来国际化它,因为他不是你创 ...
- C++ ofstream和ifstream
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O, ...