十三.Java中的泛型和枚举

摘要:
extendsNumber˃规定:只能取,不能添加。现在试想一下你的例子,Listlist=newArrayList()Java中是强类型的,就是说任何变量在具体使用时,必须明确类型。上述list在定义时,表述其中的每一项值都是Number本身或者是其子类。但是在add时,但编译器它却不知道这个list到底放的是啥类型,有可能是ArrayList,ArrayList等,因为不确定所以就不允许你add一个long或者short。观察API中Map接口及其方法的声明publicinterfaceMap{publicVget;publicSet˂Map.Entry˃entrySet();publicSetkeySet();publicvoidputAll(Map˂?

1.java泛型:

这个java中的通配符“上界”“下界”有关。在集合中:
上界<? extends Number>规定:只能取(get),不能添加(add)。
下界<? super Number>规定:不能取(get),只能添加(add)。
无界<?>:不能get也不能add。

现在试想一下你的例子,List<? extends Number> list = new ArrayList<>()
Java中是强类型的,就是说任何变量在具体使用时,必须明确类型。上述list在定义时,表述其中的每一项值都是Number本身或者是其子类。但是在add时(list.add( new Long(1) ) 看似没错),但编译器它却不知道这个list到底放的是啥类型,有可能是ArrayList<Short>,ArrayList<Test> 等,因为不确定所以就不允许你add一个long或者short。从这个list定义中,在获取值时,编译器知道的是里面放的是Number类型或者是其子类型值,因此Number n = (Number)list.get(0), Long l = (Long)list.get(0)可以编译通过。

观察API中Map接口及其方法的声明
public interface Map<K,V>{
public V get(Object key);
public Set<Map.Entry<K,V>> entrySet();
public Set<K> keySet();
public void putAll(Map<? extends K,? extends V> m);
..
}

注:通配符?只能用在泛型变量声明的时候。
//声明泛型类或泛型接口时不能使用super
使用&可以给泛型加多个限定
//如果限定既有接口也有类,那么类必须只有一个,并且放在首位置

2. java枚举:

枚举是一种,把对象个数和名字都提前确定下来,且不可再改变的特殊类
JDK1.5增加了枚举类型,可以使用enum来定义
public class Gender{
public static final Gender MALE=new Gender();
public static final Gender FEMALE=new Gender();
}
相当于:
public enum Gender{
MALE,FEMALE;
}

免责声明:文章转载自《十三.Java中的泛型和枚举》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇能否用痰盂盛饭——谈谈在头文件中定义外部变量认证与Shiro安全框架下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 标签打印示例 1

初次写博客,有哪些不足的地方,还请多多指点,给予建议,谢谢! 如若想要源码,请留言。 本实例是在Webservice 中通过excel做模板来打印标签。具体需求是:一个订单一页纸打印4行分录,如果超过4行,则再次按照原格式换纸打印,如果行数未满4行,则补空行。一、实现步骤: 1、首先在EXCEL 画好模版 (后缀名是 .xlt )2、在程序中调用EX...

C# EnumWindows 枚举所有窗口并返回指定窗口标题句柄

//调用 ListTitleHandle = new List<IntPtr>(); var r = EnumWindows(PrintWindow, "计算器"); //函数指针类型 delegate bool deleWindowsProc(IntPtr...

Win32汇编操作注册表

1.打开和关闭子键 注册表函数对注册表的操作是通过句柄来完成的,与文件操作一样,在对某个键下的子键或者键值项进行操作之前,需要先将这个键打开,然后使用键句柄来引用这个键,在操作完毕以后再将键句柄关闭。注册表的根键不需要打开,它们的句柄是固定不变的,要使用根键的时候只要把这些句柄直接拿来用就是了,Windows.inc中已经预定义了它们的数值: HKEY_C...

vue springboot利用easypoi实现简单导出

vue springboot利用easypoi实现简单导出 前言 一、easypoi是什么? 二、使用步骤 1.传送门 2.前端vue 3.后端springboot 3.1编写实体类(我这里是dto,也一样) 3.2控制层 结尾 前言 今天玩了一下vue springboot利用easypoi实现excel的导出,以前没玩过导入导出,...

Python基础之列表

列表初识 列表的作用和定义 列表是python中使用最频繁的数据类型,在其他语言中一般称为数组; 用一个变量存储多个数据; 列表存储多个数据时,在中括号之间用逗号分隔多个数据; 语法定义: 变量名 = [数据1, 数据2, 数据3,...] eg: name_list = ["zhangsan", "lisi", "wangwu"] 列表存储数据的方式和...

C#中ArrayList 与 string、string[]数组 的转换

1、ArrarList 转换为 string[] :ArrayList list = new ArrayList();list.Add("aaa");list.Add("bbb");//转换成数组string[] arrString = (string[])list.ToArray(typeof( string)) ;2、string[] 转换为 Arra...