枚举

//定义枚举
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. CF-1027-B. Curiosity Has No Limits

    CF-1027-B. Curiosity Has No Limits http://codeforces.com/contest/1072/problem/B 题意: 给定两组序列a,b,长度为n-1 ...

  2. bzoj5138 [Usaco2017 Dec]Push a Box

    题目描述: bz luogu 题解: 暴力可以记录$AB$位置转移,这个时候状态是$n^4$的,无法接受. 考虑只记录$A$在$B$旁边时的状态,这个时候状态时$n^2$的. 所以说转移有两种,一种是 ...

  3. 学习笔记(_huaji_)

    假如我没有见过太阳,我也许会忍受黑暗. 如果我知道自己会在哪里死去,我就永远都不去那儿.失败的经历,其实也有它的价值. 人的过失会带来错误,但要制造真正的灾难还得用计算机. 嘴角微微上扬已不复当年轻狂 ...

  4. 【倍增】7.11fusion

    非常奇妙的倍增题 题目描述 知名科学家小A在2118年在计算机上实现了模拟聚变的过程.我们将她研究的过程简化.核子共有26种,可以用a到z共26个字母表示.核子聚变的过程可以用一个字符串描述.按照顺序 ...

  5. DateFormat的format()方法线程不安全的问题分析

    最近看到<侦探剧场:堆内存神秘溢出事件>https://my.oschina.net/u/2368090/blog/1628720,于是自己也想测试了解一下DateFormat的多线程安全 ...

  6. verilog behavioral modeling--procedural continous assignment(不用)

    assign / deassgin force /release the procedural continuous assignments(using keywords assign and for ...

  7. 解决zend studio代码无法自动提示的3个方法

    最近电脑重装,索性把用了好多年的老版本7.x 升级了,网上下载了一个12.x的破解版. 起初一切正常,等导入项目开始开发的时候发现PHP函数尽然没有提示,一脸懵逼! 经过多方查阅和尝试,现在分享3个解 ...

  8. 【C#】【数据结构】002-线性表:单链表

    C#数据结构:单链表 1.自定义单链表结构: 单链节点类 using System.Collections; using System.Collections.Generic; using Unity ...

  9. django的rest framework框架——安装及基本使用

    一.django的FBV 和 CBV 1.FBV(基于函数的视图): urlpatterns = [ url(r'^users/', views.users), ] def users(request ...

  10. Hive中文注释乱码解决方案

    本文来自网易云社区 作者:王潘安 快速解决方法 目前的hive客户端在执行desc tablexxx和show create table xxx命令的时候,字段的中文注释会出现乱码情况,如(????) ...