有!
泛型 和枚举都是JDK1.5版本之后加入的新特性,泛型将程序代码的类型检查提前到了编译期间进行, 枚举类型 增强了程序代码的 健壮性

1. 泛型

在JDK1.5版本之前,如果在集合中添加了不同类型的数据,需要在程序的运行期间对类型之间的转换进行检查。

例如:

List arrayList=new arrayList();

在arrayList中添加String类型的对象和Integer对象,但是我们定义如下一个数组

String[] values=new String[arrayList.size()];

如果想要把arrayList转换成数组的话就会出现错误:

arrayList.toArray(values);//运行期间错误

这是因为List中包含了 整型 封装类型的对象。但是该错误只能在运行期间才能发现,程序能够正常的通过编译,并不会报错。

对于程序中出现的错误,应该尽早的通知 程序员 。泛型能够很好地解决这个问题。

1.1 泛型在集合中的应用

在JDK1.5版本之后Java提供了对泛型的支持。例如对于一个ArrayList列表来说,如果只想在列表中放入String类型元素,可以用下面的方法来实现:

ArrayList<String> list=new ArrayList<String>();

泛型使得 编译器 能够在编译期间对集合中加入的对象进行检查,如果加入了不同类型的对象,就会报错,而不必等到运行期间再进行相关的类型转换。

和原来没有使用泛型相比,它将原来需要在运行时期才能发现的异常提前到了编译期间,使得程序的安全性也大大提高,泛型一般用于集合类中。

1.2 泛型类和泛型方法

泛型类的定义如下:在类名的后面加上一对尖括号("<>"),在尖括号内部填入需要的类型。例如:

class Point< T>{ // 此处可以随便写标识符号,T是type的简称
private T var ; // var的类型由T指定,即:由外部指定
public T getVar(){ // 返回值 的类型由外部决定 ,泛型方法
return var ;
}
public void setVar(T var){ // 设置的类型也由外部决定
this.var = var ;
}
};
public class GenericsDemo06{
public static void main(String args[]){
Point< String> p = new Point< String>() ; // 里面的var类型为String类型
p.setVar("it") ; // 设置 字符串
System.out.println(p.getVar().length()) ; // 取得字符串的长度
}
}; 2.枚举

枚举也是JDK1.5之后的版本以后Java新加入的特性。使用枚举可以表示一组 常量 数据。枚举的本质是一个类,可以使用enum关键字来声明一个枚举类型,其声明方式如下:

[访问控制符] enum 枚举类型名{value1,value2,......}

使用枚举类型需要注意以下几点:

枚举类型可以定义在类的内部也可以定义在类的外部。如果定义在类的内部,那么其访问控制符可以是public,protected,private或者默认的控制符。如果定义在类的外部,其访问控制符只能是public和默认控制符;
枚举类型中定义的value值都默认为public static final的。其值一经定义就不能在被修改了。多个value值之间需要用逗号隔开;
枚举类型中除了可以声明常量之外还可以声明方法。但是方法需要在常量之后,并且常量和方法之间要用分号区分;
枚举类型中的值可以通过枚举类型名直接对他们进行访问;
枚举类型不能声明为abstract或者final类型;

例:

public enum Direction{
FORWARD,
BACK,
LEFT;
public void start(){
System.out.println("enum method");
}
}
2.1 枚举类型的常用方法

public final String name()//返回枚举常量的名称;

public final int ordinal()//返回枚举常量在枚举类型中的位置,第一个枚举值序号为0,依次类推;

public String toString()//返回枚举常量的名字,可以重写此方法;

public static valueOf(enumType,String name)//返回与name名字相对应的枚举常量;