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集合进行存放数据.那么,集合和数组既然都是 ...
随机推荐
- MySQL语句技巧
1.查询时间的格式: (1) 查询时将时间戳格式化 SELECT FROM_UNIXTIME(eventtime) FROM table_name SELECT FROM_UNIXTIME(e ...
- 记一次JVM故障排除
今天,自己开发的事件驱动的java大规模爬虫程序上线了几个新任务后突然异常. 异常: 程序业务异常,经查看CPU利用率满,内存满,一直报OOM,目测有内存泄露.如下图所示,四核16G的内粗,CPU高达 ...
- Android Studio 真机调试 连接手机
前提:adb环境已经配置 手机端: 1.打开手机开发者权限,”设置“ 中找到 “版本号”,连续多次点击,会提示打开“开发者”.我的是 “设置” --> "关于手机" --&g ...
- Unity进阶----DoTween及工程文件夹的建立(2018/11/12)
DoTween 仅介绍部分常用用法,代码参上:(其它操作见官网:http://dotween.demigiant.com/documentation.php) using System.Collect ...
- FCC(ES6写法) Symmetric Difference
创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组. 给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2 ...
- ABP入门系列(3)——领域层定义仓储并实现
ABP入门系列目录--学习Abp框架之实操演练 一.先来介绍下仓储 仓储(Repository): 仓储用来操作数据库进行数据存取.仓储接口在领域层定义,而仓储的实现类应该写在基础设施层. 在ABP中 ...
- 详解AMD规范及具体实现requireJS在工程中的使用
前面的话 由CommonJS组织提出了许多新的JavaScript架构方案和标准,希望能为前端开发提供统一的指引.AMD规范就是其中比较著名一个,全称是Asynchronous Module Defi ...
- C++ Opencv remap()重映射函数详解及使用示例
一.重映射及remap()函数介绍 重映射,就是把一幅图像中某位置的像素放置到另一图像指定位置的过程.即: 在重映射过程中,图像的大小也可以同时发生改变.此时像素与像素之间的关系就不是一一对应关系,因 ...
- 【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优
一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体 1.代码调优 1.避免创建重复的RDD,尽 ...
- Python内置函数(17)——divmod
英文文档: divmod(a, b) Take two (non complex) numbers as arguments and return a pair of numbers consisti ...