枚举

//定义枚举
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语言基础部分—枚举与泛型的更多相关文章

  1. day03<Java语言基础+>

    Java语言基础(逻辑运算符的基本用法) Java语言基础(逻辑运算符&&和&的区别) Java语言基础(位运算符的基本用法1) Java语言基础(位异或运算符的特点及面试题) ...

  2. Java学习总结(二)----Java语言基础

    1.     Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...

  3. java语言基础02

    一.Java语言基础(常量的概述和使用)(掌握) 1:什么是常量 就是在程序的执行过程中其值不发生改变的量. 2:Java中常量的分类 (1):字面值常量 (2):自定义常量(面向对象部分讲解) 3: ...

  4. Java之--Java语言基础组成—数组

    Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...

  5. Java之--Java语言基础组成—函数

    Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...

  6. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)

    Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...

  7. Java语言基础(二) Java关键字

    Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...

  8. Java语言基础(九)

    Java语言基础(九) 一.自增运算(++) 自减运算(--) i++ 就是将i+1再赋给 i i-- 是将i-1再赋给 i 对变量i,j来说,i++ 或++i 这里没什么区别,都是将i的值加1后,再 ...

  9. Java语言基础(八)

    Java语言基础(八) 一.数学运算  + - * /  % (1)凡是byte  short  char类型都按int类型的计算   看看上面的代码,为什么出错! 我已经将100转成byte类型,( ...

随机推荐

  1. python多进程与多线程编程

    进程(process)和线程(thread)是非常抽象的概念.多线程与多进程编程对于代码的并发执行,提升代码运行效率和缩短运行时间至关重要.下面介绍一下python的multiprocess和thre ...

  2. shell进阶

    shell 中的高级用法 1.if 单重判断 if cmd; then cmd cmd cmd fi 多重判断 单分支 if cmd;then cmd elif cmd fi 双分支 if cmd; ...

  3. python中魔法方法(持续更新)

    1.对于一个自定义的类,如果实现了 __call__ 方法,那么该类的实例对象的行为就是一个函数,是一个可以被调用(callable)的对象.例如: class Add: def __init__(s ...

  4. CSS布局基础--BFC

    1,什么是BFC BFC(Block Formatting Context)块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局.一个环境中的元素不会影响到其他环境中的布局. ...

  5. Django的中间件及WSGI

    什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的 ...

  6. Java列出接口实现的所有接口

    package com.tj; public class MyClass2 { public static void main(String[] args) { Class cls = java.ut ...

  7. 【01】报错:webpack 不是内部或不可执行命令

    [02] webpack 不是内部或不可执行命令 一般来安装完之后是可以直接执行的你可以执行 webpack -v 或者是 webpack --help   这样的就是正确的,我的问题的解决办法是 将 ...

  8. 阿里云PolarDB及其共享存储PolarFS技术实现分析(下)

    上篇介绍了PolarDB数据库及其后端共享存储PolarFS系统的基本架构和组成模块,是最基础的部分.本篇重点分析PolarFS的数据IO流程,元数据更新流程,以及PolarDB数据库节点如何适配Po ...

  9. python第三方库之openpyxl(1)

    python第三方库之openpyxl(1) 简介 Openpyxl是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库,其功能非常强大.Excel表格可以理 ...

  10. 使用pipework将Docker容器桥接到本地网络环境中

    在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...