JAVA 高级特性枚举和泛型

 枚举: 

语法: 

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);

}

Enum特点:

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

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

被继承。

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

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

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

不能使用new关键字。

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

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

泛型: 

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

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

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

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

好处是更安全简单。

泛型类语法结构:

class class-name <type-param-list>{//....}

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

class-name<type-param-list> obj = new class-name<type-param-list>(con-arg-list)

泛型接口语法结构: 

interface interface-name <type-param-list>{//....}

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

class class-name<type-param-list> implements interface-name<type-param-list>{}

泛型方法语法结构: 

public <T> 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<T>{

    public T test(T t);

}

实现泛型接口结构:

public class Ginterimp<T>implements Genericinterface<T>{

     @Override

public T test(T t) {

// TODO Auto-generated method stub

return null;

}

}

泛型方法结构: 

public <T> 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文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Swift讲解专题九——枚举

Swift讲解专题九——枚举一、引言      在ObjectiveC语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据。二、枚举语法      Swift中enum关