一.
刚才说了一下泛型类,现在准备说另外一个,在工具类的基础上演示一下(基于上一节的泛型工具类)。
本来如果是显示和打印String类的方法,参数中直接表明String类型即可,但是如果想显示和打印Intrger类型的参数,那么就需要将参数改为object。
基于泛型工具类,书写可以是下面这样的。工具类里面指定什么类型,方法就跟着操作什么类型。
这样书写是否行得通,来演示一下,
传递String类型时没有问题,但是工具类中的泛型是传递什么类型都可以,那么改成Integer试一下,集成工具显示了错误。
因为定义的类带有泛型,而tool这个引用指向的对象当中明确的类型是String,那么这个对象就只能操作凡是具备String参数的方法。这个方法一明确以后,show里面就已经是String了,那么再传递其它类型就失败了,因为类型检查没过去,编译的时候没过去。
现在我们想show里面是任意类型的,怎么办?这就意味着show方法操作的对象类型不确定。有人提议将工具类中show方法的参数类型改为object,这是可以的。因为这些对象最终调用的都是object中的方法,第二张截图所示,多态。
还可以做第二件事,如果是不明确类型的情况下,object其实是一种具体类型。还可以是,往里面传递什么,就操作什么,可以定义泛型,将泛型定义在方法上。
这就是定义泛型了。(w str)是在使用参数,<w>是在定义参数,只有定义了才能使用。泛型是用于定义的?
将泛型定义在方法上之后,什么类型都可以show了,源程序编译运行都没有问题。
print泛型是跟着对象走的,show的泛型是在方法上自定义的。
接着对上面的程序进行演示,添加一个静态的method方法。集成环境显示编译是错误的,相较于前面的print方法,这里是多出了一个静态修饰。
静态是不需要对象的,泛型是需要对象来明确。静态不知道QQ怎么用,两全其美的解决方法如下图,既要是静态,又要是method方法能结构多种类型。
泛型方法的基本使用讲解完了。
再说一点,show方法和print方法接收的是字符串的话,能否打印字符串的长度呢?下面截图显示是不可以的,一旦使用了泛型,变量类型是不确定的,那怎么能使用一个具体对象的方法,万一传递的是person类型,怎么能写成str.length()。但是这个变量有些方法是可以用的,
哪些方法是可以用的呢?用点号显示出来。我们知道无论传递什么类型进来,肯定都是object类型的对象,因此,肯定具备object方法。
如果show或者print方法里面直接写成object的话,那么只能使用object方法,但是,如果写成泛型的形式,后面会讲述到,这个W类型是可以进行一个应用的。