Java语言学习(十一):枚举类型和泛型

原创
2018/07/18 17:45
阅读数 1.1K

    Java中一个重要的类型:枚举,它可以用来表示一组取值范围固定的变量,使用 enum 关键字定义枚举类型,其中元素不能重复,通常大写表示。利用Java的反射机制,可以在运行时分析类,如查看枚举类型的修饰符、父类和自定义方法等,下面简单说下。

    (一)枚举类型

    定义一个简单的枚举类型,如下:

public enum Position{
   EAST,SOUTH,WEST,NORTH
}

    利用Java反射机制分析类:

//获取Class对象
Class<Position> eClass = Position.class;
String modify = Modifier.toString(eClass.getModifiers());
System.out.println("修饰符:"+modify);
System.out.println("父类:"+eClass.getSuperclass());

    输出为:

修饰符:public static final
父类:class java.lang.Enum

    Enum类是所有枚举类型的父类,它是一个没有抽象方法的抽象类。该类定义了枚举类型的常用方法,如枚举元素间的比较compareTo()和equals()方法、枚举元素定义的名称name()方法等,可以使用“==”比较两个枚举元素。

    枚举类型不能继承,可以看做普通类,像定义方法,这里就不做介绍了,基本很少用到。

    (二)泛型

    泛型是Java中的重要特性,使用泛型编程可以使代码获得最大的重用。在使用泛型时要指明泛型的具体类型,避免类型转换。

    定义一个栈结构的泛型类:

/*
 * 泛型:定义参数类型为T的泛型类
 */
public class Stack<T> {
    //使用T类型的链表保存入栈的元素(简化开发)
	private LinkedList<T> conter = new LinkedList<T>();
    //向栈中添加元素
	public void push(T t){
        conter.addFirst(t);
    }
    //从栈中删除元素
	public T pop(){
        return conter.removeFirst();
    }
    //判断链表是否为空
	public boolean empty(){
        return conter.isEmpty();
    }
}

    测试类:

public static void main(String[] args) {
    //创建栈对象,并指定参数类型
    Stack<String> stack = new Stack<String>();
    //添加元素
    stack.push("Java");
    stack.push("Php");
    stack.push("Python");
    //遍历栈
	while(!stack.empty()){
        System.out.println((String)stack.pop());
    }
}

    泛型类就是含有一个或多个类型参数的类,泛型参数的命名一般使用单个的大写字母,如上所示,且有一定的局限性,像泛型类型的参数只能使用类类型,如String、Integer等,而不能使用基本数据类型,如int、float等,不能抛出或捕获泛型类型的实例,不能直接使用泛型数组,不能实例化类型变量等。

    Java中的泛型不支持实例化类型变量,如 “T[] arr = new T[10];”,属于非法的语句。对于某些不足之处,可以使用Java反射机制进行弥补,如泛型数组,这里不做介绍了,大家感兴趣的可以自行百度查看。

    在Java中,不仅可以声明泛型类,还可以在普通类中声明泛型方法。声明泛型方法需要注意:

  • 使用<T>格式来表示泛型类型参数,参数的个数可以多个;
  • 类型参数列表要放在访问权限修饰符、static和final之后;
  • 类型参数列表要放在返回值类型、方法名称、方法参数之前;

    简单的声明如下所示:

public static <T> List<T> query(String sql){}

     利用泛型类型参数<T>可以将类、方法或接口的类型限制为T类型,但不够灵活。Java中可以使用通配符增强泛型,使用“?”作为通配符,可以利用extends关键字来设置取值的上限,如:“<? extends Number>”表示Byte、Double、Float、Integer等都适合这个类型参数。另外还可以设置取值下限,这里不做介绍了。

    泛型在Java中的一个应用:查找。在数据结构中,查找有很多类型,如顺序查找、折半查找、散列查找等,这里有泛型化的折半查找法,大家感兴趣的可自行学习。

    好了,上面就是一些关于Java中枚举类型和泛型的知识总结,希望大家喜欢。

展开阅读全文
打赏
0
4 收藏
分享
加载中
更多评论
打赏
0 评论
4 收藏
0
分享
返回顶部
顶部