00:00
下面要给他讲的是个什么呢?诶,下面要他讲的就是叫做类型约束之上界和下界的概念,这个呢在我们开发中也是经常用的,叫upper boun和lower Bo。那这个我们现在回忆一下,Java中有没有上界和下界的概念呢?也有啊,也有,大家看在Java半形里面表示某个类是A类的子类,我们一般用的是下面这个符号叫啊来关键字的,那么这个形式叫做上界,上界上限或者上界语法呢,实际上是T是A,这里表示T呢是A的这种。子类子类型。或者呢,呃,也有这种通配类型,同学们也知道也可以用,对吧,一个问号,这也是可以的。那么在我们SC里面它是怎么玩的呢?各位在SKY里面它做了一个改进,呃,形式上说了变化了,它什么呢?在开这个上键呢,它比如说要表示表示某个类型是A类的子类。
01:08
A类的子类,那么它的写法。就变成了这样一个形式,它用的是这个小于冒号。来表示,你也可以用通配,通配呢,那个心就是下划线的意思,这个也可以用哦。好,这个呢,也叫上界或者上上界或者上限一样的,只是语法发生变化了,那于这个到底表示什么意思呢?表示什么意思?就表示D是A的一个子类型,那么我们针对上届我们来做几个案例啊,我们来做几个案例,我们先来做第一个案例,这个比较有意思啊,是关于上届的。一个案例,他中上届应用案例,先看我的要求。
02:01
先看我的要求,请。请编写一个通用的类。可以进行T和T之间、float和float之间的比较。啊,那么需要实现comp comparable接口的值就是就是int类型之间,In,呃,Flo之间,或者是其他,比如说浪啊。啊,Double呀等这些实现了comparable接口的值的直接比较。什么意思呢?大家在学Java的时候都知道,像我们,呃,像我们这个类型是实现这个接口的。在Java long.inter这里面,大家都知道这个inter呢,其实是实现comp comparable这个接口了,是这意思吧。应该没有忘吧,忘了的话我给他提一下。
03:00
好,我先建一个包,咱们不着急啊,把这个讲完,Upper bounce啊,Upper bounce,那么我们先给大家建一个文档,对,Upper。BSDEMO01。DEMO01好,写到这儿。呃,那么这个。这个怎么来回忆这个东西呢?大家看一下Java none,像这个integer。我们追进去看一下intake做了什么事情,你看他。它其实是呃,实现了这个comp comparable这个接口。那这个接口里面又有什么东西呢?追进去里面呢,就有一个方法叫compare to。啊compare to这样呢,他就可以进行一个比较啊,进行一个比较,那现在呢,人家就是让你啊这个之间的比较,你要把它做出来。
04:01
好,然后呢,我们要求大家用两种方式来完成,第一种呢,要求大家用传统方法做。啊,传统方法大家应该都会做吧,这个很简单,然后呢,要求用上界的方式来做,这样体会它的好处,就是说如果我用传统的方法来做呢,你有几种类型,你就得写几种。如果用上届这个方式呢,其实就可以做成一个通用的形式,那么我们先来看传统的方法,比如这个案例啊,同学们,我们到时间呢做一个比较啊,各位同学请看。好,我先把需求。我先把需求拿过来。啊,我先把需求拉过来。也就是说,只有只有有这个需求了,过后呢,大家才能够。啊,去进行一个一个探讨。好,我把它写到这儿吧。
05:00
好,我们来写第一个,第一个呢,就是最简单的,这个呢,我就不去写了,特别的简单,大家应该一看就清晰,比如说这个类。这个类里面我写了compare int,传入一个int,传一个int,然后呢,如果N1大于N2,就返回N1,那当然就是最大的呢,就出来这个就是。就是返回较大的值。A,很简单,那么我们来用一下,比如说现在我六一个compile in,我随便写个十。40。点我返回一个compare in这么一个实例,然后呢,我就掉了,怎么调呢,简单的很,compare.g啊,Greater。Greater加E。Great,我把这个地方应该返回多少呢?返回一个事实代码就写完了,运行一下。肯定是返回事实的,因为事实呢比十要大一些。
06:00
正确,但是这个传统的方法呀,它有一个问题。传统方法是什么问题呢?就是说你float你还得写一份。你你因为你没用泛型嘛,你也没有用到我们这个上下键,那假如是FLOAT1,你如果是float,你要传播进去的,比如说你这写一个12.1。这个代码它就不匹配了。不匹配了,当然虽然你可以用其他方法,但是呢,我们现在呢,要用上界来解决,这个怎么做呢?好,同学们看下面呢,我们就使用上界这个方式来完成。啊,使用上界。啊,上界。啊,有些地方叫什么呢,叫上线都是一个意思来完成。二来完成。那么它怎么怎么来完成呢?其实非常的简单,请看这段代码,我写的compare上,前面写一个泛型T小于等于,注意这句话怎么理解?
07:06
这个地方就是代表我要输入的这个类型,它是实现了compar comparable的这个接口的类型就可以了。就代表是它的子类,因为我实现了你我自然就是你的子类,然后里面有object,然后这地方你因为你这样用了过,有什么好处呢?这样的好处就是我们可以直接调用它的compare这个方法就搞定了。诶,他这个思路呢,也是非常有意思的啊好,我们来看一看它这个是怎么实现的。好,我们来写一下class。我。复制一份啊。我把这个改成。com。Come。Compare,就是通用的一个比较,然后呢,我在这里写上一个上限,比如说T小于等于什么玩意儿呢?Comparable comparable,然后里面这个类型。
08:08
对,实现它,实现它呢,我仍然要去接收两个对象,哎,OBJECT1。它的类型是什么类型呢?就是T这个类型就是你这个T是穿越是什么,然后呢,Object。OBJECT2。OBJECT2,它也是。好,然后这边呢,因为你这个你这个object呀,它实现这个compare了,所以说呢,我们在这地方调的时候,你会看到come,我们随便找一个。对吧,点你看自然就掉出了这个compar to,为什么呢?因为你这个T这个类型是comparable的一个子类型,因为它是只要你实现comparable一个接口就行了,所以说我在这呢要做一个说明。
09:00
说明什么呀?第一点注意听这句话的意思。这句话的意思表示,表示传入的T,表示T这个类型。类型是什么呢?是是comparable,它的这个comparable这个一个。一个子类型。子类型说的再直接一点,就是你传进这个T呢,即啊你传入的这个T要T类型要实现。我要要要要继承都可以啊,要继承继承谁呢?Comparable。这个接口啊,就是这这个接口。啊,就这么一个意思。啊呃,第三点呢,就是呃,这个OBJECT1呢,因为是他,所以说直接可以用方法,那么这样。这样。就可以直接就可以直接使用compare compare to这个方法,那那我就写了啊,非常的简单,那我就写一个DEF。
10:13
我也叫。D great等于。If if什么呢?Object一点,Compare。To。OBJECT2注意这个地方呢,它返回的是一个整数,说你知道大于零就代表object大。Object大,然后L10呢,就代表OBJECT2大写完了。那说老师你这种写法跟传统写法有什么好处吗?好处那是很明显的,就是只要这个T类型实现这个接口,我就不需要去写多份了,它是通用的一种方式,也就是说这种方式呢,比传统方式它的通用性要好。这样的写法啊,就是使用什么呢?使用上阶的写法。
11:02
使用上界。上界的写法,它的通用性,通用性。啊,通用性比。比什么呢?诶,它比这个传统的要好。传统的好。是不是,那当然我现在就开始呢,玩一把了。怎么写呢,咱们看啊。我们六。一个compare。我现在写什么呢?好,同学们看,我们先看一种写法,大家看能不能成功啊十。40。诶,你看很有意思,说老师你看你这个代码都写的没有错啊com mon。Compare。一后面你会看到大连用的是123了啊,大家看这个语法没有错,那同学们看,你们觉得我这样用行吗?哎,你看我这海龟这掉出来了,你们觉得这样使用行吗?
12:00
你们觉得行不行,首先十和40,他有没有去实现我们这个compare接口啊。这个十和40是不是在这里面,它是特类型的。这个int类型在我们SC里面,它实现这个compare的吗?他并没有,所以这样执行呢,他会只给你报错啊,他会给你报错,你看报了错了。啊,他说这个是有问题的,那怎么办呢?因为人家要求是实现这个compare,那么我们知道inegr它是实现了的,同学们在学Java的时候应该讲过,那我简单了,我就这样写了。因。TD。啊,点它出来。连什么呢?Value of,写个十,哎,你看这样子就能体现出刚才我们讲的这个特点,Inter。点value of,把这个事实写进去。好把后面这个删掉。
13:00
同学们看现在的情况就发生变化了,我现在给家传的类型呢,它是integer,而integer我们追进去。它实现了compare接口,因此它就满足你这个上界的规定,什么呢?我是你的子类型。我是你的子类型,于是这个时候执行呢,就没有任何问题跑起来。好,你看这个写法呢,是OK的。OK的事实好,既然这个写法可以,那同学们看啊。我们再来看,这是第一个用法。第一个。用法,我们再看第二个用法,为了省时间,我也不啰嗦了,直接复制一份。那么现在我这样写,你们看看行不行,哎,同学们看我这样写,你们看行不行,就是float。诶。Float哎,然后呢,这边我们也改成float,然后呢,这边改成1.1给他传一个。
14:06
小数进去进行比较。那同学们想,现在我这样写为什么报错了,有个同学告诉我啊。哎,对了,因为你这个float,现在你写的是scaleing float scale里面float,你进去看SC里面是个object,它这个里面并没有像我们想象的那种value of方法对不对,那你要怎么办呢?好办,你这样写Java点有T有浪包里面的这个就OK了,诶浪包里面这个就OK了。啊。哎,这个地方也不行是吗。Java电脑。应该是有的呀。点V可以啊。为什么这么搞一个呢?1.1哦,我少个F,是不是我刚才少了个F这个字就不对了,好,这样子我把它写进去了,写进去过后同学们看啊。这个就行了。
15:01
再写一个。2.1,那这个时候呢,我们看它又能用了,也就是说现在它就。22.1啊,这边变成二,这个时候你你会发现什么呢?它这个就是通用性要比。啊,第一个要好很多,因为我只要写一份。只要他这边实现compare接口的,我就可以用,我一执行一看效果又出来了。效果又出来了,这还不算完,还有一个更简单的写法。诶,所以我们今天学的这个语法啊,第二个用法,还有一个更简单的用法是这样写的,各位同学这样写来看一个。三。三我还用这个写,但是呢,我觉得这样写太啰嗦了,不划算,太累了,你看我这样写。我这样直接写个F。这样直接写个F,同学们想这样写行不行?这样写行不行,显然这样写就是你们看到这个写法啊,这个我还是上去吧。
16:05
你们看这个写法,虽然语法能够,其实大家心里都很清楚,这个是跑不起来的。因为你1.1F并没有实现comparable,也就它并不是我们这个子类,对不对,这样运行它仍然会报一个错误。因为你就是没有不增加子类嘛,但是我又不想这样写太麻烦,我怎么写呢?不要忘了一件事情,是不是前面我们这儿可以指定一个类型了,诶这个地方看看它能不能搞定呢?同学们看,其实特别有意思啊,这就是以后你们看代码你要看得懂了,Java点。那点float。哎,但我这样一写,哎,同学们看到这边是不是画了个线线呢。这是干什么呢啊,他用的隐私转换,那有的同学说是隐私转换干什么呢?各位同学请注意听。这里这样第三种写法。
17:00
D。三种。写法使用。聊。影视转换。这个隐私转换很高级,什么高级呢?大家看,我给同学们看一段它的源码,你们就心里清晰了,有一个叫pray,哎,同学们,以前我讲过pretty fat这个包是不是不用你就可以用啊?诶,我们注进去看看这里面有什么东西哦,当我们打开过后,我们一下就发现了,有大量的好玩意的东西都在里边藏着呢。好,我给同学们看一下,往下搂,哎,往下搂。啊,往下找,诶有点意思,你看好多好多press,这个这叫隐私什么呀,隐私函数看懂了吗?现在你看有一个方法,同学们看有个什么玩意儿,Float to float。往下走。哎,朋友们,你们看到这个东西没有。哎,这是什么玩意儿?
18:00
他说如果将来你有一个这样的float,我可以转成这样的float,看到没有,这个float是我们卡里面的float,这个是我们Java float,这个Java float才实现了我们的。Compare接口,诶他就这么来的,大家看懂了吗?这呢就发现了一个隐式函数的妙用,我们后面还有很多这个语法现象,今天你看完了听完了过后啊,坦白来讲,对语法你们是确实会上一个,不能说上一个层次吧,至少看懂别人代码应该没问题了,那对方你看我们就整了一个这玩意。那这样你再用,你觉得有问题吗?不会再有问题了,那这样子啊,为了让他看到效果呢,我写个21,这边写个十,同学们请看我们执行的运行的结果,我们发现这个时候返回了一个21点。看啊,哎,这这个错误式子是什么地方出来的。这谁这这这谁写的,这是写的啊,这怎么谁写这代的法啊,这个是很讨厌那个写法好21.1,我们可以看到这个效果又出来了。
19:09
好,同学们以后再看这个代码,能看懂了吧,能看懂了哎说哦,原来老师讲过这个地方还用了一个一,他用了上键,第二还藏了一个隐私转换在里边的高级啊,这些语法就是语法堂啊,很厉害,后面还有更厉害的语法堂。那么这个呢,就是我们讲的开圣剑应用的第一个案例。通过这个。通过这个呢,大家应该多少能体会一下他这个上级的好处了,好,我把这个案例呢给同学们板述一下。当然后面还有还有案例啊,我们说一下,刚才我们讲的是呃上界。啊,下界还没说,现在讲的是上界。我们现在讲的是上界啊,现在讲的是天堂这块的事情,待会再讲下届啊,啊,我们先把这个放到这里来,这是我们的标题三,对不对,好讲了一个,先说了一下Java上界你是怎么写的,那我这做了一个简单的回顾啊,紧接着呢,我说了一下我们这个,呃,死开了的这个这个这个商界。
20:15
哎,桑姐好,我也写到你的。好,诶,这个地方我看看是不是。诶,我看这个大的标题有没有。这个是看了泛型的应用奖了,诶那个大的标题我看是没有给啊。啊,这个地方应该再给一个大标题。再给大标题忘给了,就这个这个大标题没给到,我们这个结构就出问题了,应该是标题二啊,它会自动的给我们排一下标题二。往下来一下。标题二,这样就对了,它会自动往下排。好,刚才说的是Java的,那现在呢,我们说一下开的开这个上界呢,它的语法是这样子的,诶也写到这里来。
21:01
这是我们的标题三。好这么一个SC,上届的一个简单的描述,注意一个语法,好讲完这个东西过后呢,我们给大家举了一个案例,对吧,上届的一个案例,好,这个案例呢,我们也把它板书过来。啊,这个是我们上届的一个案例啊,你看应该是标题三。标题三,好,来了一个案例。啊,这个案例我们的要求呢,是第一步要求写一个通用的啊通用的类。然后呢,呃,要我们使用传统的方法,刚才讲了一个传统方法,还有了一个上界的方式来进行比对,那么我把这个代码给它满足到里面,代码就是刚才我们写的。这一段代码。把它复制到我们的笔记中去。啊,把它复制到我们的笔记中去,来一个小表格。啊,来个小好,呃,那么关于我们上届的呃,一个基本介绍和第一部分应用案例,我们先介绍到这里。
我来说两句