4.JAVA语言基础部分—枚举与泛型
枚举
//定义枚举
enum MyEnum{
ITEM_A,
ITEM_B
}
public static void main(String[] args) {
//values()获取所枚举项的集合
MyEnum[] enums=MyEnum.values();
for (MyEnum myEnum : enums) {
print(myEnum.toString());//输出ITEM_A ITEM_B
} //valueOf("字符串")把字符串转为枚举
MyEnum myEnum=MyEnum.valueOf("ITEM_B");
print(myEnum.toString());//结果 ITEM_B //compareTo(b)比较两者在定义时的顺序,若b后于比较者返回-1,小于比较者时返回1,相同时为0
int i=MyEnum.ITEM_A.compareTo(MyEnum.ITEM_B);
System.out.println(i);//结果 1 //ordinal()得到索引位置,从0开始
int index=MyEnum.ITEM_B.ordinal();
System.out.println(index);//结果 1
}
枚举也有构造方法,但必须使用private,常用于给枚举项加标签说明功能
// 定义枚举
enum MyEnum {
ITEM_A("我是A啊"), ITEM_B("我是B呢"), ITEM_C(23); // 最后一项要写; private String description;
private int num; // 构造方法须用private
private MyEnum(String descn) {
description = descn;
} private MyEnum(int i) {
num = i;
} // 对外提供获取描述信息
public String getDesn() {
return description;
} public int getI() {
return num;
}
} public static void main(String[] args) {
// values()获取所枚举项的集合
MyEnum[] enums = MyEnum.values();
for (MyEnum myEnum : enums) {
print(myEnum.getDesn());// 我是A啊 我是B呢 null
}
System.out.print(MyEnum.ITEM_C.getI());// 23
}
泛型
//可多个泛型,泛型可以约束
public class Examplte02<T1 extends List, T2> {
//可以为字段类型使用泛型
private T2[] mens;
//参数可以泛型
public void say(T2 arg) {
System.out.println(arg);
}
//返回数据也可以为泛型
public T1 getResult(T2 arg) {
ArrayList<Integer> arrays = new ArrayList<Integer>();
arrays.add((int) arg);
return (T1) arrays;
}
} //调用
public static void main(String[] args) {
//这里不需要具体到ArrayList<string>等, 且Integer不能使用int代替
Examplte02<ArrayList<Integer>, Integer> exam02=new Examplte02<ArrayList<Integer>, Integer>();
exam02.say(23);
ArrayList<Integer> a= exam02.getResult(25);
}
枚举
使用类型通配符
格式: 泛型类名称<? extends List>
? 与T的区别在于,例如一个类里的现个方法要用到T泛型,那么在类上面也要写T。但?就不需要,不受限制。
public class Examplte02{
//这里使用通配符后,类名不需要与泛型T那样的写法
public void say(ArrayList<? extends Number> arg) {
System.out.println(arg.size());
}
}
//调用
public static void main(String[] args) {
Examplte02 e02=new Examplte02();
ArrayList<Integer> as=new ArrayList<Integer>();
as.add(10);
e02.say(as);
//这里可传Double也行,因为Double继承于Number
ArrayList<Double> as2=new ArrayList<Double>();
as2.add(20d);
e02.say(as2);
}
注意
public class Examplte02{
//这里使用supper,说明类型必须是Number或Number的父类,这里向上限制;extends是向下限制
public void say(ArrayList<? super Number> arg) {
arg.add(25);//这里会报错,使用通配符后只能读和删除,不能新增或变更值
arg.get(0);//这里正常
arg.remove(0);//这里正常
System.out.println(arg.size());
}
}
4.JAVA语言基础部分—枚举与泛型的更多相关文章
- day03<Java语言基础+>
Java语言基础(逻辑运算符的基本用法) Java语言基础(逻辑运算符&&和&的区别) Java语言基础(位运算符的基本用法1) Java语言基础(位异或运算符的特点及面试题) ...
- Java学习总结(二)----Java语言基础
1. Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...
- java语言基础02
一.Java语言基础(常量的概述和使用)(掌握) 1:什么是常量 就是在程序的执行过程中其值不发生改变的量. 2:Java中常量的分类 (1):字面值常量 (2):自定义常量(面向对象部分讲解) 3: ...
- Java之--Java语言基础组成—数组
Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...
- Java之--Java语言基础组成—函数
Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...
- Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)
Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...
- Java语言基础(二) Java关键字
Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...
- Java语言基础(九)
Java语言基础(九) 一.自增运算(++) 自减运算(--) i++ 就是将i+1再赋给 i i-- 是将i-1再赋给 i 对变量i,j来说,i++ 或++i 这里没什么区别,都是将i的值加1后,再 ...
- Java语言基础(八)
Java语言基础(八) 一.数学运算 + - * / % (1)凡是byte short char类型都按int类型的计算 看看上面的代码,为什么出错! 我已经将100转成byte类型,( ...
随机推荐
- PHP必知必会
MQ(消息队列) 消息队列主要用于以下场景: 1. 上传图片,用户需要迅速反馈,把上传图片的后续操作交给consumer 2. A用户对B用户发消息 3. 日志记录,APP发生的任何警告错误日志都要被 ...
- HDU-2544-最短路(floyd)
板子题,实验一下floyd. #include <cstdio> #include <algorithm> #include <cstring> using nam ...
- 蓝牙学习 (6) - Play with TI sensorTag (1)
硬件 cc2650 SensorTag Connect with App 在手机上安装Ti提供的sensorTag App即可和sensorTag 建立连接. 如下手机截图,
- 《零基础入门学习Python》【第一版】视频课后答案第005讲
测试题答案: 0.Python中: int:整型 bool:布尔类型 float:浮点型 str:字符串类型 1.为什么布尔类型(bool)的TRUE和FALSE分别用0和1表示? 计算机只认识二进制 ...
- python--BOM和DOM
一. 介绍 什么是BOM和DOM? 简要答案:BOM是浏览器对象模型,用来获取或设置浏览器的属性.行为,例如:新建窗口.获取屏幕分辨率.浏览器版本号等. DOM是文档对象模型,用来获取或设置文档中标签 ...
- Python中的序列化以及pickle和json模块介绍
Python中的序列化指的是在程序运行期间,变量都是在内存中保存着的,如果我们想保留一些运行中的变量值,就可以使用序列化操作把变量内容从内存保存到磁盘中,在Python中这个操作叫pickling,等 ...
- EFCore CodeFirst模型迁移生成数据库备注(mysql)
重写Mysql下sql脚本生成器 using Framework.NetCore.Extensions; using Framework.NetCore.Models; using Microsoft ...
- idea14配置tomcat
1.File -> New Project ,进入创建项目窗口 2.在 WEB-INF 目录下点击右键,New -> Directory,创建 classes 和 lib 两个目录 3.F ...
- 【强化学习】百度云BCC openai gym 环境配置
openai gym是RL算法的测试床.为了直观和便于调试,我们需要可视化界面.然而远程服务器使用openGL的问题比较棘手,这篇博客记录在百度云BCC上配置openai gym环境的注意事项. 按照 ...
- BZOJ 1006 [HNOI2008]神奇的国度==最大势算法
神奇的国度 K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在. ...