万博官网手机版登陆HashtableKey

当前位置:万博官网手机版登陆 > 万博官网手机版登陆 > 万博官网手机版登陆HashtableKey
作者: 万博官网手机版登陆|来源: http://www.shirokilaw.com|栏目:万博官网手机版登陆

文章关键词:万博官网手机版登陆,泛型类型

  在Java 语言中经常以专用的方式来使用类,这限制了方法调用所返回的参数可能的运行时类型。例如,假定往

  Object更具体的公共类型。但是在目前现有的 Java 语言版本中,不可能将散列表的特定键和元素声明为比Object

  Hashtable中只放了String,而类型系统也只知道所检索的值是Object类型。在对检索到的值进行任何特定于String的操作之前,必须将它强制转换为String,即使是将检索到的元素添加到同一代码块中,也是如此!a

  方法主体部分的第三行中需要进行的数据类型转换。因为 Java 类型系统相当薄弱,因此代码会因象上面那样的数据类型转换而漏洞百出。这些数据类型转换不仅使 Java 代码变得更加拖沓冗长,而且它们还降低了静态类型检查的价值(因为每个数据类型转换都是一个选择忽略静态类型检查的伪指令)。我们该如何扩展该类型系统,从而不必回避它呢?

  用泛型类型来解决问题!要消除如上所述的数据类型转换,有一种普遍的方法,就是用泛型类型

  来增大 Java 类型系统。可以将泛型类型看作是类型“函数”;它们通过类型变量进行参数化,万博官网手机版登陆这些类型变量可以根据上下文用各种类型参数进行实例化。例如,与简单地定义类Hashtable

  HashtableKey, Value,万博官网手机版登陆其中Key和Value是类型参数。除了类名后跟着尖括号括起来的一系列类型参数声明之外,在 Tiger 中定义这样的泛型类的语法和用于定义普通类的语法很相似。例如,可以按照如下所示的那样定义自己的泛型Hashtable类:a

  Key和Value的类型。传递类型参数的方式取决于我们打算如何使用Hashtable。在上面的示例中,我们真正想要做的是创建Hashtable实例,它只将Integer映射为String。可以用新的Hashtable类来完成这件事:a

  的语法。就像泛型类的类型参数用尖括号括起来那样,泛型类型应用程序的参数也是用尖括号括起来的。

  List)的话,则可能会是一项浩大的工程。幸好,Tiger 为用户提供了所有 Java 集合类的泛型版本,因此我们不必自己动手来重新定义它们了。此外,这些类能与旧代码和新的泛型代码一起无缝工作(下个月,我们会说明如何做到这一点)。a

  Tiger 的基本类型限制Tiger 中类型变量的限制之一就是,它们必须

  用引用类型进行实例化- 基本类型不起作用。因此,在上面这个示例中,无法完成创建从int映射到String的Hashtable。这很遗憾,因为这意味着只要您想把基本类型用作泛型类型的参数,您就必须把它们组装为对象。另一方面,当前的这种情况是最糟的;您不能将int

  Hashtable,因为所有的键都必须是Object类型。我们真正想看到的是,基本类型可以自动进行包装(boxing)和解包装(unboxin

  受限泛型有时我们想限制可能出现的泛型类的类型实例化。在上面这个示例中,类

  Hashtable的类型参数可以用我们想用的任何类型参数进行实例化,但是对于其它某些类,我们或许想将可能的类型参数集限定为给定类型范围内的子类型。例如,我们可能想定义泛型ScrollPane

  Pane。被包含的Pane的运行时类型通常会是类Pane的子类型,但是静态类型就只是Pane。有时我们想用 getter 检索被包含的Pane

  MyPane添加到ScrollPane中,该类型参数可以用Pane的任何子类进行实例化。然后可以用这种形式的子句:extendsBound来说明MyPane的声明,从而来设定MyPane的范围:a

  首先,范围使我们增加了静态类型检查功能。有了静态类型检查,就能保证泛型类型的每次实例化都符合所设定的范围。其次,

  因为我们知道类型参数的每次实例化都是这个范围之内的子类,所以可以放心地调用类型参数实例出现在这个范围之内的任何方法。如果没有对参数设定显式的范围,那么缺省情况下范围是Object,这意味着我们不能调用范围实例在Object中未曾出现的任何方法。a

  多态方法除了用类型参数对类进行参数化之外,用类型参数对方法进行参数化往往也同样很有用。泛型 Java 编程用语中,用类型进行参数化的方法被称为多态方法(Polymorphic method)

  。多态方法之所以有用,是因为有时候,在一些我们想执行的操作中,参数与返回值之间的类型相关性原本就是泛型的,但是这个泛型性质不依赖于任何类级的类型信息,而且对于各个方法调用都不相同。

  List类中。这个静态方法只带一个参数,也将是 List 唯一的元素(直到添加了其它元素)。因为我们希望List成为其所包含的元素类型的泛型,万博官网手机版登陆所以希望静态factory方法带有类型变量T这一参数并返回ListT的实例。但是我们确实希望该类型变量T

  ,根据参数类型来自动推断出多态方法的类型。这可以大大减少方法调用的繁琐和复杂性。例如,如果想调用make方法来构造包含new Integer(0)的ListInteger新实例,那么只需编写:a

  4.将“商户单号”填入下方输入框,点击“恢复VIP特权”,等待系统校验完成即可。

  4.将“商家订单号”填入下方输入框,点击“恢复VIP特权”,等待系统校验完成即可。

网友评论

我的2016年度评论盘点
还没有评论,快来抢沙发吧!