关闭

Java中的泛型和枚举

218人阅读 评论(0) 收藏 举报
分类:

泛型和枚举都是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 泛型类和泛型方法

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

[java] view plain copy
  1. class Point< T>{  // 此处可以随便写标识符号,T是type的简称    
  2.  private T var ; // var的类型由T指定,即:由外部指定    
  3.  public T getVar(){ // 返回值的类型由外部决定 ,泛型方法   
  4.   return var ;    
  5.  }    
  6.  public void setVar(T var){ // 设置的类型也由外部决定    
  7.   this.var = var ;    
  8.  }    
  9. };    
  10. public class GenericsDemo06{    
  11.  public static void main(String args[]){    
  12.   Point< String> p = new Point< String>() ; // 里面的var类型为String类型    
  13.   p.setVar("it") ;  // 设置字符串    
  14.   System.out.println(p.getVar().length()) ; // 取得字符串的长度    
  15.  }    
  16. };    

2.枚举

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

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

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

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

例:

[java] view plain copy
  1. public enum Direction{  
  2.         FORWARD,  
  3.         BACK,  
  4.         LEFT;  
  5.         public void start(){  
  6.             System.out.println("enum method");  
  7.         }  
  8.     }  

2.1 枚举类型的常用方法

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

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

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

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

0
0
查看评论

java 基础总结 -- enum 枚举与接口、泛型、集合的使用

/** * 随机取得enum中的一个enum实例工具类 * 枚举和泛型的使用 * @author zghw * */ public class Enums { private static Random random = new Random(47); /** * 随机取得enu...
  • zghwaicsdn
  • zghwaicsdn
  • 2016-02-11 05:07
  • 654

java基础知识总结7(枚举+泛型)

七、枚举枚举是一个类类型,是JDK1.5的新特性 枚举的关键字是enum Java中所有的枚举类都是java.lang.Enum的子类注意:枚举类中可以包含成员有【字段(常量)、方法(构造方法、普通方法)】枚举中不能有number;不能赋值————类只有顺序可以比较———–语法:enum 枚举名...
  • qq_26431469
  • qq_26431469
  • 2016-03-29 10:43
  • 22886

枚举与泛型知识点总结

枚举 使用枚举类型,可以取代以往定义常量的方式,同时枚举类型还赋予了程序在编译时进行自检的功能。以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用,但常量不能够被修改。因为在接口中定义常量时,常量的修饰符为“final”和“static”。如下: public interface ...
  • csdn0709
  • csdn0709
  • 2016-11-29 20:50
  • 631

Java中的枚举和泛型复习

1 枚举 JDK 1.5加入了枚举类型,可以使用该功能取代以往定义常量的方式,同时枚举类型还赋予程序在编译时检查类型的功能。在以往设置常量时,通常将常量放置在接口中,这样在程序中就可以直接使用,并且该常量不能被修改,因为在接口中定义常量时,该常量的修饰符为static和final。而使用枚举类型定...
  • shangwei1991
  • shangwei1991
  • 2015-11-16 15:48
  • 342

利用泛型和反射对Java对象集合转换成Json的工具类

转载请注明出处:http://blog.csdn.net/ylp_boy //T是实际调用时传入的实体的类型 public static String entityListToJson(List list)throws NoSuchMethodException, SecurityExcept...
  • ylp_boy
  • ylp_boy
  • 2015-03-26 16:46
  • 565

枚举类Enumeration的使用

Enumeration Enumeration接口本身不是一个数据结构。但是,对其他数据结构非常重要。  Enumeration接口定义了从一个数据结构得到连续数据的手段。 例如,Enumeration定义了一个名为nextElement的方法,可以用来从含有多个元素的数据结...
  • wangbaoyin
  • wangbaoyin
  • 2012-05-12 23:11
  • 2643

java基础-泛型 枚举

一.泛型泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。1.泛型方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。 下面是定义泛型方法的规则: 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在...
  • u012426959
  • u012426959
  • 2017-12-08 09:11
  • 131

Java_枚举、自动拆装箱和泛型

Java_枚举和泛型 1.枚举:关键字 enum  问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个;  解决办法:  1.在setGrade方法中做判断,不符合格式要求就抛出异常; 2. 直接限定用户的选择,通过自定义类模...
  • qq_28511837
  • qq_28511837
  • 2015-05-31 01:07
  • 566

Java泛型中T和问号(通配符)的区别

类型本来有:简单类型和复杂类型,引入泛型后把复杂类型分的更细了. 概述 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安...
  • ikownyou
  • ikownyou
  • 2017-03-24 14:17
  • 5124

C#和java中泛型的本质区别

转自: 为什么JVM上没有C#语言?浅谈Type Erasure特性 每次提到语言的时候我总是忍不住骂Java是一门生产力低下,固步自封的语言——这估计要一直等到Java语言被JVM上的其他语言取代之后吧。JVM上目前已经有许多语言了:JRuby,Jython;还有一些特定于JVM平...
  • u012780317
  • u012780317
  • 2016-06-17 11:46
  • 989
    个人资料
    • 访问:22834次
    • 积分:305
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:4篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论