Generic泛型
1.问题
未使用泛型时,元素的类型不安全;操作麻烦,可能需要强制转换
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import day8.Customer;
public class GenericTest {
@Test
public void testCollectionGeneric() {
List l1=new ArrayList();
l1.add(new Customer(1,"AA"));
l1.add(new Customer(3,"CC"));
l1.add(new Customer(2,"BB"));
//类型不安全:可以放入任何类型的元素
l1.add(10);
//操作麻烦:从集合中取元素时,需要进行类型的强制转换
Customer c0=(Customer) l1.get(0);
System.out.println(c0);
}
}
2.引入
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class GenericTest {
@Test
public void testCollectionGeneric() {
//声明一个Customer类型的List
List<Customer> l2=new ArrayList<Customer>();
l2.add(new Customer(1,"AA"));
l2.add(new Customer(3,"CC"));
l2.add(new Customer(2,"BB"));
// l2.add(10); 无法放入其他类型的元素
Customer c1=l2.get(1); //获取元素无需强转
System.out.println(c1);
}
}
3.场合
<E,K...>:泛型参数,可以在使用其他类型的场合都可以使用泛型类型;泛型参数可以有多个。
1.声明泛型类
public class GenericClass<E,K> {
private E i; //变量类型由泛型类决定
private K j;
public E getI() {
return i;
}
public void setI(E i) { //方法的类型和参数也由泛型类决定
this.i = i;
}
}
public class GenericTest1 {
public static void main(String args[]){
GenericClass<Integer,String> gc=new GenericClass<Integer,String>(); //确定泛型类
gc.setI(123); //参数为int类型
System.out.println(gc.getI());
}
}
2.声明泛型方法
泛型的声明,必须在public,static,final,abstract等之后,返回值声明之前;可以拥有多个泛型参数。
public class GenericMethod{
public <E> E getI(E i){
return i;
}
public <E> E getN(int i){
return null;
}
public <E> void display(E i) {
System.out.println(e.getClass());
}
}
public class GenericTest1 {
public static void main(String args[]){
GenericMethod gm=new GenericMethod();
gm.getI(1);
gm.getN(1);
System.out.println(gm.getI(1));
System.out.println(gm.getN(1));
gm.display(1);
gm.display("1");
gm.display(12.13);
}
}
3.声明泛型集合
确保了元素的类型安全,操作简单
import java.util.HashMap;
import java.util.Map;
public class GenericTest {
@Test
public void testCollectionGeneric() {
Map<String,Integer> score=new HashMap<String,Integer>();
score.put("1", 90);
score.put("2", 80);
score.put("3", 70);
// score.replace("1", 90, 100);
/*Set<String> keyset=score.keySet();
for(String key : keyset){
Integer value=score.get(key);
System.out.println(key+" : "+value);
}*/
for(Map.Entry<String, Integer> entry:score.entrySet()){
String key=entry.getKey();
int value=entry.getValue();
int hashcode=entry.hashCode();
System.out.println(hashcode+" -> "+key+" : "+value);
}
}
Generic泛型的更多相关文章
- JAVA入门——Generic/泛型
在台科大的第二次JAVA作业,老师课上讲的内容是泛型. 泛型(generic),泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以 ...
- Java - 泛型 ( Generic )
Java - 泛型 ( Generic ) > 泛型的特点 > 解决元素存储的安全性问题 > 解决获取数据元素时,需要类型强转的问题 ...
- Java 8 新特性之泛型的类型推导
1. 泛型究竟是什么? 在讨论类型推导(type inference)之前,必须回顾一下什么是泛型(Generic).泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据 ...
- 泛型深入--java泛型的继承和实现、泛型擦除
泛型实现类: package generic; /** * 泛型父类:子类为“富二代”:子类的泛型要比父类多 * 1,保留父类的泛型-->子类为泛型类 * 2,不保留父类泛型-->子类按需 ...
- asp.net数据类型--泛型
asp.net有很多的数据类型,同时c#等均是强数据类型,在使用的过程,存在因数据类型不一致,在编译时通过,在使用过程中出错的情况,因此从2.0起,增加泛型这种类型.这种类型,在定义时不指定类型,而在 ...
- C#基础-hashtable,泛型和字典集合
hashtable 的存储方式 使用方法: 1.引入包含Hashtable的命名空间 using System.Collections; // 引入Hash所在的命名空间 2.往hash表里面添加数据 ...
- java 关于泛型的一些知识点
public class Generic <T>{ private T ob; public Generic(T ob){ this.ob=ob; } public T GetOb(){ ...
- 那些年【深入.NET平台和C#编程】
一.深入.NET框架 1..NET框架具有两个组件:CLR(公共语言运行时)和FCL(框架类库),CLR是.NET框架的基础 2.框架核心类库: System.Collections.Generic: ...
- S2---深入.NET平台和C#编程的完美总结
1.NET简单解说 l 面向对象提升 OOP(Object Oriented Programming)面向对象编程 AOP:(Aspache Oriented Programming):面向切面编 ...
随机推荐
- Native SQL
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 业务对象(BO)设计
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Sqlite 学习记录
Sqlite命令行(CLP)====================================================================================== ...
- React生命周期浅析
引言 关于React的生命周期API,官网,有着详细说明.但在实际写代码的过程中,这些说明不能解决所有的疑惑. 所以我列举了一些编码中常见用例,供大家参考. 示例代码如下 /* use case 1. ...
- 手机页面中的meta标签
以前看书的时候,觉得meta标签就只有一个charset对于我来说是有用的.前段时间有个学弟让我写个手机版的网页,我才知道原来meta标签有那么多学问. meta指元素可提供有关页面的元信息(meta ...
- LTE Module User Documentation(翻译6)——物理误差模型、MIMO模型、天线模型
LTE用户文档 (如有不当的地方,欢迎指正!) 9 PHY Error Model 物理误差模型包含数据误差模型和下行控制误差模型,两者默认为激活.可以使用 ns-3 属性系统去激活,具体为: ...
- poj1971Parallelogram Counting
链接 越来越感觉到了数学的重要性!.. 这题本来用以斜率和长度为key值进行hash不过感觉很麻烦还TLE了.. 最后知道中点一样的话就可以组成平行四边形,初中数学就可以了.. #include &l ...
- keepalived的安装和使用
IP配置 管理IP地址 角色 备注 网卡 192.168.1.114 主调度器(Director) 对外提供VIP服务的地址为192.168.1.88 eth1 192.168.1.205 备用调度器 ...
- Java源码初学_ArrayList
一.ArrayList的构造器和构造方法 在ArrayList中定义了两个空数组,分别对应当指定默认构造方法时候,指向的数组已经给定容量,但是容量等于0的时候,指向的数组.此外在构造函数中传入Coll ...
- Eclipse用Tomcat插件部署Java Web项目
Eclipse版本3.7.2,Tomcat插件是3.3 详细步骤如下: 1.下载tomcatPlugin插件 tomcatPlugin下载地址http://download.csdn.net/deta ...