zoukankan      html  css  js  c++  java
  • 第17章 枚举类型与泛型

    1、枚举类型

    JDK1.5中新增了枚举类型与泛型。

    枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中,此外,它还提供了安全检查功能。

    枚举类型本质上还是以类的形式存在。

    enum是定义枚举类型的关键字。

    例如:在项目中创建Constants接口,在接口中定义敞亮的常规方式:

    public interface Constants{
        public static final int Constants_A=1;
        public static final int Constants_B=12;
    }

    新增枚举类型后就逐渐取代了这种常量定义方式,使用枚举类型定义常量的语法如下:

    public enum Constants{
        Constants_A,
        Constants_B,
        Constants_C
    }

    2、泛型

    (1)泛型实质上就是使程序员定义安全的类型。

    在没有出现泛型之前,Java也提供了对Object的引用“任意化”操作,这种任意化操作就是对Object引用进行“向下转型”及“向上转型”操作,但某些强制类型转换的错误也许不会被编译器捕捉,而在运行后出现异常,可见强制类型转换存在安全隐患,所以再次提供了泛型机制。

    例如:在项目中创建Test类,在该类中使基本类型向上转型为Object类型:

    public class Test {
        private Object b; // 定义Object类型成员变量
        
        public Object getB() { // 设置相应getXXX()方法
            return b;
        }
        
        public void setB(Object b) { // 设置相应setXXX()方法
            this.b = b;
        }
        
        public static void main(String[] args) {
            Test t = new Test();
            t.setB(new Boolean(true)); // 向上转型操作
            System.out.println(t.getB());
            t.setB(new Float(12.3));
    Float f
    = (Float) (t.getB()); // 向下转型操作 System.out.println(f); } }

    在本实例中,Test类中定义了私有的成员变量b,它的类型为Object类型,同时为其定义了相应的setXXX()与getXXX()方法,

    在类的主方法中,将new Boolean(true)对象作为setB()方法的参数,由于setB()方法的参数类型为Object,这样就实现了“向上转型”操作;

    同时在调用getB()方法时,将getB()方法返回的Object对象以相应的类型(这里是Float)返回,这个就是“向下转型”操作。

    因为“向上转型”是安全的,而如果进行”向下转型“操作时用错了类型,或者并没有执行该操作,就会出现ClassCastException异常。

    (2)定义泛型类

    泛型机制的语法如下:

    类名<public class OverClass<T> { //定    private T over; // 定义泛型成员变量

        
        public T getOver() { // 设置相应getXXX()方法
            return b;
        }
        
        public void setOver(T over) { // 设置相应setXXX()方法
            this.b = b;
        }
        
        public static void main(String[] args) {
            //实例化一个Boolean型的对象
    OverClass<Boolean> over1=new OverClass<Boolean>();
    //实例化一个Float型对象
    OverClass<Float> over2=new OverClass<Float>();

    over1.setOver(true)
    ; //不需要类型转换 over2.setOver(12.3f);


    Boolean b=over1.getOver(); //不需要类型转换
    Float f=over2.getOver();
    System.out.println(b);
    System.out.println(f); } }
  • 相关阅读:
    iscsi一致性的测试验证方法
    ceph各个版本之间参数变化分析
    rgw的rgw_thread_pool_size配置调整
    rgw前端替换civetweb为beast
    配置内网访问的TV
    关于vm.min_free_kbytes的合理设置推测
    rbd的删除回收站功能
    python爬取微博热门话题榜
    Selenium+Pytest自动化测试框架—禅道实战
    python带参数装饰器的两种写法
  • 原文地址:https://www.cnblogs.com/chamie/p/4711026.html
Copyright © 2011-2022 走看看