第十三章枚举类型与泛型

枚举
Java中的枚举是一种特殊的类,它用于定义一组有限的常量。
枚举在Java中被视为数据类型,你可以使用它们来创建枚举类型的变量,然后使用那些变量等。
枚举类使用enum关键字进行定义。
例如:在这个例子中,我们定义了一个名为Day的枚举类,它包含了一周的七天作为常量。

定义枚举类时,需要遵循以下规则:

枚举类中只能包含常量和方法,以及构造函数。

枚举常量必须是public static final类型,每个常量的名称必须唯一。

枚举类中可以定义构造函数和方法,但这些方法只能访问枚举常量和实例变量。

枚举常量按照它们的声明顺序在枚举类中进行排序。

枚举类不能继承其他类或实现接口。

枚举常量的名称必须是唯一的,不能重复。

枚举类的构造函数只能有一个,且必须为private类型。

枚举类中不能使用继承和多态等特性。

使用

枚举类型在实际中主要用于以下几个方面:

定义有限个特定的值:枚举可以用来定义一组有限的特定的值,例如一周的天数,或者颜色等。这些值在程序运行期间是不会改变的。

作为方法的参数:枚举可以作为方法的参数,这样可以让代码更加清晰,易于阅读和维护。例如,你可以定义一个枚举类型来表示不同的排序方式,然后在方法中使用这个枚举作为参数。

作为返回类型和参数类型:枚举可以作为方法的返回类型和参数类型。例如,你可以定义一个方法来获取一个枚举类型的列表,或者传递一个枚举类型的对象作为参数。

例如:在这个例子中,我们定义了一个枚举SortType来表示不同的排序方式。
这个枚举有两个值:ASC和DESC,分别表示升序和降序。我们还为每个值提供了一个字符串描述。

案例代码:

运行结果:

深入了解枚举类型
枚举类型较传统定义常量的方式,除具有参数类型检测的优势外,还具有其他方面的优势。用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被 final、public、static修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。
由于枚举类型对象继承于java.lang.Enum类,所以该类中一些操作枚举类型的方法都可以应用到枚举类型中。表13.1 中列举了枚举类型中的常用方法。

1、values()方法
枚举类型实例包含一个 values0方法,该方法将枚举中所有的枚举值以数组的形式返回。
案例:

运行结果:

2、valueOf()方法与compareTo方法
枚举类型中的静态方法 valuesOf() 可以将普通字符串转换为枚举类型,而 comparedTo() 方法
用于比较两个枚举类型对象定义时的顺序。
3、ordinal()方法
  枚举类型中的 ordinal() 方法用于获取某个枚举对象的位置索引值。
4、枚举类型中的构造方法
 枚举类型中的 ordinal() 方法用于获取某个枚举对象的位置索引值。

运行结果:

使用枚举类型的类型的优势  

  枚举类型声明提供了一种对用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。

总结枚举类型,它具有以下特点:
类型安全。
紧凑有效的数据定义。
可以和程序其他部分完美交互。
运行效率高。

泛型

定义泛型类
Object类最上层的父类,很多程序员为了使用更为通用,设计程序时通常使传入的值与返回的值都以Object类型为主。当需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则在运行时将会发生ClassCastException异常。为了提前预防这种问题,Java提供了泛型机制。

语法如下:

类名.<T>

运行结果:

 

泛型的常规用法
1、定义泛型类时声明多个类型
语法如下:

class MyClass T1,T2>{  }

2、定义泛型类时声明数组类型

案例代码:

运行结果:

泛型的高级用法 
1、限制泛型可用类型
默认可以使用任何类型来实例化一个泛型类对象,但Java中也对泛型类实例的类型作了限制。


语法如下:
class 类名名称 CT extends anyClass> anyClas 
指某个接口或类,使用泛型限制后,泛型类的类型必须实现或继承anyClass 这个接口或类。无论anyClass是接口还是类,在进行泛型限制时都必须使用extends关键字。


2、使用类型通配符
在泛型机制中,提供了类型通配符,主要作用是在创建一个泛型类对象时限制这个泛型类的类型实现或继承某个接口或子类。要声明这样一个对象可以使用“?”通配符来表示,同时使用extends关键字来对泛型加以限制。

使用泛型类型通配符的语法如下:


泛型类名称 C?extends List>a=null;

3、继承泛型类与现实泛型接口
定义泛型的类和接口可以被继承与实现。

让SubClass类继承ExtendClass的泛型,代码如下:
class ExtendClass T1>{}class SubClass T1,T2,T3>implements SomeInterface T1>{}

 总结
泛型的使用方法:
泛型的类型参数只能是类类型,不可以是简单类型,如Cint>这种泛型定义就是错误的。
泛型的类型个数可以是多个可以使用extends关键字限制泛型的类型
可以使用通配符限制泛型的类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值