JAVA 高级特性枚举和泛型

Wesley13
• 阅读 893

 枚举: 

语法: 

public enum 枚举名 { 枚举值表(罗列所有值) }

 例如: 

public enum EnumTest{MON,TUE,WED.THU,FRI,SAT,SUN}

枚举操作 ---取值

  1. 使用“枚举.variable“的形式取出枚举中的指定内容

  EnumTest e = EunmTest.MON  // 取出星期1

 2 ,  使用“枚举.values()”的形式,将全部的枚举类型变为 对象数组的形式

for(EnumTest e : EnumTest.values()){

System.out.println(e);

}

JAVA 高级特性枚举和泛型

Enum特点:

Enum 中的每一个枚举值都是一个对象。 遍历出来之后是一个对象数组。

1、 枚举的直接父类是java.lang.Enum, 但是不能显示的继承Enum , 且其子类也不能

被继承。

2、 枚举就相当于一个类, 可以定义构造方法、 成员变量、 普通方法和抽象方法 。

3、 默认私有的构造方法, 即使不写访问权限也是private。

4、 每个实例分别用于一个全局常量表示, 枚举类型的实例个数有限的、 固定的,

不能使用new关键字。

5、 枚举实例必须位于枚举中最开始部分, 每个实例间以逗号进行分割, 枚举实例

列表的后面要有分号与其他成员相分隔。

泛型: 

泛型是JDK5.0的新特性, 所谓的泛型就是参数化类型, 即在定义类

时不指定类中属性的具体类型, 而由外部在声明及实例化对象时

指定具体的类型。 这种类型参数可以用在类、 接口和方法的创建

中, 分别为泛型类、 泛型接口、 泛型方法。 JAVA语言引入泛型的

好处是更安全简单。

泛型类语法结构:

class class-name {//....}

实例化泛型类的语法结构:

class-name obj = new class-name(con-arg-list)

泛型接口语法结构: 

interface interface-name {//....}

实现泛型接口的语法结构:

class class-name implements interface-name{}

泛型方法语法结构: 

public T genericMethodTest(T ts){

T t = ts;

return t;

}

实现泛型方法结构:

new GenericMethod().genericMethodTest(11);

泛型类定义; 

使用泛型类进行类型占位。

public class GenericClass<T,K> {

private T t;

public K k;

public T getT() {

return t;

}p

ublic void setT(T t) {

this.t = t;

}

}

泛型接口实例:

泛型接口结构:

public interface GenericInterface{

    public T test(T t);

}

实现泛型接口结构:

public class Ginterimpimplements Genericinterface{

     @Override

public T test(T t) {

// TODO Auto-generated method stub

return null;

}

}

泛型方法结构: 

public GenericMethodTest(T ts){

  T t= ts;

  return t;

}

实现泛型方法结构: 

new GenericMethod().genericMethodTest(11);

类型通配符: 

类型通配符一般是使用? 代替具体的类型实参,表示可以接受此类型的任意泛型对象。

类型通配符----->上限

为了能够对类型参数做进一步的限制,比如只能是Number类及其子类,此时就需要用到类型通配符上限来解决, 其格式为: 

类名称< ? extends 类> 对象名称

例如:

//接收GenericClass对象, 范围上限设置为Number, 所以只能接收数字类型

public static void fun(GenericClass< ? extends Number> temp){

System.out.println(“数字是: ”+temp);

 }

类型通配符----->下限

当使用的泛型只能在本类及其父类类型上应用时,就必须使用泛型的范围下限进行配置, 其格式为: 

类名称< ? super 类> 对象名称

例如: 

//只能接收String或Object类型的泛型

public static void fun(GenericClass<? super String> temp){

System.out.println(“内容”+temp);

}

泛型擦除; 

Java中的泛型这一概念提出的目的,导致其只是作用于代码编译阶段,在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦除,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Swift讲解专题九——枚举
Swift讲解专题九——枚举一、引言      在ObjectiveC语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据。二、枚举语法      Swift中enum关
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这