java_泛型2
一.泛型_泛型概述及好处
1).在定义集合时,我们是希望集合中只存储一种类型的引用,这时可以使用泛型:
ArrayList<String> list = new ArrayList<>(); //JDK7以后可以这样写
或者:
ArrayList<String> list = new ArrayList<String>();//JDK7以前必须这样写
2).泛型的好处:可以规定一个集合中只能存储什么一种固定的类型。当不小心存储其它类型时,编译器会编译错误。
ArrayList<String> list = new ArrayList<>();
list.add("abc");
list.add(10);//编译错误
二.泛型_定义和使用含有泛型的类
package com.ahd.fanxing; public class Father<K,V> { public void setK(K k){ public V getV() { public void setV(V v) {
|
注意:
1).<E>:表示定义了一个“泛型”,它表示“一种类型”,只有在使用这个类时,才定义这个类型。
2).<E>:语法:可以大写、可以小写、可以一个字母,也可以是多个字母。
三.泛型_含有泛型的方法
public class MyList {
public <E> void show(E e1,E e2,E e3) {
System.out.println("show()...");
}
}
测试类:
public class Demo {
public static void main(String[] args) {
MyList myList = new MyList(); myList.<Integer>show(10,20,30); myList.<String>show("abc", "bbb", "ccc");
}
}
四.泛型_含有泛型的接口
1).定义方法同“泛型类”一样:
public interface Animal<E> {
public void show(E e);
public E get();
}
五泛型_泛型通配符
1).? : 可以表示:具有任何泛型的集合对象
public class Demo {
public static void main(String[] args) {
ArrayList<Object> objList = new ArrayList<>();
ArrayList<Integer> intList = new ArrayList<>();
ArrayList<String> strList = new ArrayList<>(); /*fun1(objList);//OK的
fun1(strList);//错误
fun1(intList);//错误*/ fun2(objList);
fun2(strList);
fun2(intList); }
public static void fun1(ArrayList<Object> object) { }
//需求:定义一个方法,可以接收具有任何泛型的ArrayList对象
public static void fun2(ArrayList<?> object) { }
}
2).<? extends E>:表示可以接收:E及其E的子类泛型。设定了“上限”:
class Person{}
class Student extends Person{}
class JavaStudent extends Student{}
class PHPStudent extends Student{} class Teacher extends Person{ } public class Demo {
public static void main(String[] args) {
ArrayList<Person> list1 = new ArrayList<>(); ArrayList<Student> list2 = new ArrayList<>();
ArrayList<JavaStudent> list3 = new ArrayList<>();
ArrayList<PHPStudent> list4 = new ArrayList<>(); ArrayList<Teacher> list5 = new ArrayList<>(); // fun(list1);//错误
fun(list2);
fun(list3);
fun(list4);
// fun(list5);//错误 } //需求:定义一个方法,可以接收具有Student及其子类泛型的ArrayList对象
public static void fun(ArrayList<? extends Student> list) { }
}
3).<? super E>:表示可以接收:E及其E的父类泛型。设定了“下限”:
public class Demo {
public static void main(String[] args) {
ArrayList<Person> list1 = new ArrayList<>(); ArrayList<Student> list2 = new ArrayList<>();
ArrayList<JavaStudent> list3 = new ArrayList<>();
ArrayList<PHPStudent> list4 = new ArrayList<>(); ArrayList<Teacher> list5 = new ArrayList<>(); fun(list1);
fun(list2);
// fun(list3);//错误
// fun(list4);//错误
// fun(list5);//错误 } //需求:定义一个方法,可以接收具有Student及”父类“类泛型的ArrayList对象
public static void fun(ArrayList<? super Student> list) { }
}
-------------------------------------------------------------------------------
java_泛型2的更多相关文章
- java_泛型(构造器)部分实例
package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; class ...
- java_泛型(2016-11-17)
没有自己敲,这篇博客讲的不错,直接记录. 犯懒啊 重点关注 T,?以及擦除 Java总结篇系列:Java泛型:http://www.cnblogs.com/lwbqqyumidi/p/3837629. ...
- Java_泛型
转自博客HappyCorn https://www.cnblogs.com/lwbqqyumidi/p/3837629.html 什么是泛型? 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法 ...
- Java_泛型_01_T与?
二.参考文档 1.JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
- java_泛型,设置类型通配符的上限
package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; class ...
- java_泛型 TreeSet 判断hashcode/length(升序排列)
package ming; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; ...
- java_泛型(设置通配符下限)
package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; /* * 返 ...
- java_类泛型承继方法
package ming; class Apple3<T>{ private T info; public Apple3(){} public Apple3(T info){ this.i ...
- Java_集合与泛型
Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据.在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都是 ...
随机推荐
- C#转发Post请求,包括参数和文件
/// <summary> /// 转发Post请求 /// </summary> /// <param name="curRequest">要 ...
- NP-Completeness理解
今天大年初一,哪里也没去,在家里重新看了下IOA的NP问题.感觉看明白了. 首先定义下: 所谓P问题是指所有能在多项式复杂度解决的问题,比如排序算法,n*n复杂度解决问题. 有些问题目前没有多项式复杂 ...
- 我们为什么要搞长沙.NET技术社区(三)
我们为什么要搞长沙.NET技术社区(三) 万事先从饭局开始是中华民族留下来的一个优秀的传统美德. 昨天晚餐时间,长沙 .net 技术社区的主要发起人员进行了一番小聚,同时也作为一个非正式会议,对社区发 ...
- Ansible批量修改root密码
0x01:首先做好免密登录 http://www.cnblogs.com/evlon/p/8094306.html 0x02:批量修改密码 ansible all -m raw -a "ec ...
- SDL 开发实战(七): 使用 SDL 实现 PCM播放器
在上文,我们做了YUV播放器,这样我们就入门了SDL播放视频.下面我们来做一个PCM播放,即使用SDL播放PCM数据. 下面说明一下使用SDL播放PCM音频的基本流程,主要分为两大部分:初始化SDL. ...
- Java的几种设计模式
java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式. 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模 ...
- 树莓派3B+ HDMI连接显示屏 因供电问题而不能进入系统
1.config.txt文件中hdmi_force_hotplug=1前面的注释符号"#"一定要去掉. 2.完成上述操作后,树莓派通过HDMI连接屏幕,一直在开机画面循环重复,却不 ...
- [Swift]LeetCode741. 摘樱桃 | Cherry Pickup
In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 mea ...
- [Swift]LeetCode956. 最高的广告牌 | Tallest Billboard
You are installing a billboard and want it to have the largest height. The billboard will have two ...
- Ubuntu12.04下安ns-3.29及Ubuntu换源方法
目录 1.下载ns-3.29 2.安装gcc-4.9.2 3.编译.测试ns-3.29 第一种:更新,文章开头说的 第二种,更新源 主机型号:Ubuntu12.04 仿真环境版本:NS-3.29 安装 ...