Java泛型

       Java泛型 在Java SE1.5中,增加了一个新的特性:泛型(日本语中的总称型)。何谓泛型呢?通俗的说,就是泛泛的指定对象所操作的类型,而不像常规方式一样使用某种固定的类型去指定。泛型的本质就是将所操作的数据类型参数化,也就是说,该数据类型被指定为一个参数。这种参数类型可以使用在类、接口以及方法定义中。

一、 为什么使用泛型呢?

       在以往的J2SE中,没有泛型的情况下,通常是使用Object类型来进行多种类型数据的操作。这个时候操作最多的就是针对该Object进行数据的强制转换,而这种转换是基于开发者对该数据类型明确的情况下进行的(比如将Object型转换为String型)。倘若类型不一致,编译器在编译过程中不会报错,但在运行时会出错。 使用泛型的好处在于,它在编译的时候进行类型安全检查,并且在运行时所有的转换都是强制的,隐式的,大大提高了代码的重用率。

二、 泛型的简单例子:

       首先,我们来看看下面两个普通的class定义

       public class getString {

              private String myStr;

              public String getStr() {

                 return myStr;

              }

             public void setStr(str) {

                 myStr = str;

             }

       }

       public class getDouble {

             private Double myDou;

             public Double getDou() {

                 return myDou;

             }

             public void setDou(dou) {

                 myDou = dou;

             }

       }

       这两个class除了所操作的数据类型不一致,其他机能都是相同的。现在,我们可以使用泛型来将上面两个class合并为一个,从而提高代码利用率,减少代码量。

      public class getObj {

             private T myObj ;

             public T getObj() {

                  return myObj;

             } public void setObj {

                  myObj = obj;

             }

     }

     那么,使用了泛型后,如何生成这个class的实例来进行操作呢?请看下面的代码:

           getObj strObj = new getObj();

           strObj.setObj(“Hello Nissay”);

           System.out.println(strObj.getObj());

           getObj douObj = new getObj();

           douObj.setObj(new Double(“116023”));

           System.out.println(douObj.getObj());

三、 例子分析 现在我们来分析上面那段蓝色字体的代码:

      1、是泛型的标记,当然可以使用别的名字,比如。使用声明一个泛型的引用,从而可以在class、方法及接口中使用它进行数据定义,参数传递。 

      2、在声明的时候相当于一个有意义的数据类型,编译过程中不会发生错误;在实例化时,将其用一个具体的数据类型进行替代,从而就可以满足不用需求。

四、 泛型的规则和限制 通过上述的例子,我们简单理解了泛型的含义。在使用泛型时,请注意其使用规则和限制,如下:  

      1、泛型的参数类型只能是类(class)类型,而不能是简单类型。 比如,是不可使用的。

      2、可以声明多个泛型参数类型,比如,同时还可以嵌套泛型,例如:<List<String>>

      3、泛型的参数类型可以使用extends语句,例如<? extends Collection>。

      4、泛型的参数类型可以使用super语句,例如< T super childclass>。

      5、泛型还可以使用通配符,例如<? extends Collection>

五、 扩展

      1、extends语句 使用extends语句将限制泛型参数的适用范围。例如: ,则表示该泛型参数的使用范围是所有实现了collection接口的calss。如果传入一个则程序编译出错。

      2、super语句 super语句的作用与extends一样,都是限制泛型参数的适用范围。区别在于,super是限制泛型参数只能是指定该class的上层父类。 例如,表示该泛型参数只能是List和List的上层父类。

      3、通配符 使用通配符的目的是为了解决泛型参数被限制死了不能动态根据实例来确定的缺点。 举个例子:public class SampleClass < T extends S> {…} 假如A,B,C,…Z这26个class都实现了S接口。我们使用时需要使用到这26个class类型的泛型参数。那实例化的时候怎么办呢?依次写下 SampleClass a = new SampleClass(); SampleClass a = new SampleClass(); … SampleClass a = new SampleClass(); 这显然很冗余,还不如使用Object而不使用泛型,呵呵,是吧? 别着急,咱们使用通配符,就OK了。 SampleClass<T extends S> sc = new SampleClass(); 只需要声明一个sc变量,很方便把!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值