对于IHiTabLayout接口,我想起了一个kt泛型的问题

对于IHiTabLayout接口,我想起了一个kt泛型的问题

IHiTabLayout接口如下:

interface IHiTabLayout<T extends ViewGroup, D>

然后我想起之前一直困扰我的kt问题,假如我有这么一个java类:

public abstract class Request<T, R extends Request>

因为java的泛型不是强制写的,所以后面可以写R extends Request,但是到了kt就不行了,kt一定要显式标明泛型,如这样写是报红:

​class A<T, R : A> 

可我不明白为什么要这样规定,很明显A就是基类,R是表示子类,肯定是先有基类才有子类,理解不了为什么kt要这样做,请问kt怎么写这种泛型?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
提问者 sleeping_cat 2020-12-29 11:07:04

我看了网上的泛型貌似都没提到这个区别,也实在不知道要搜什么关键字才能找到这个例子,我搜kt java 泛型 区别,讲的东西都一个样,我就按照规则套上去,遇到这个例子就不行了

  • ​class A<T, R : A> 范式是在哪里看到的呢,这个范式无论是Java还是kotlin都是不支持的。
    另外,分享一个小技巧给你:如果不知道kotlin泛型怎么写,可以先实现个Java的泛型然后通过as的Java转kotlin工具转成kotlin的泛型写法就可以对照着学习了。

    2020-12-31 00:23:22
  • 提问者 sleeping_cat 回复 CrazyCodeBoy #2

    class A<T, R : A>这种写法确实是没有的,我是看着java的class A<T, R extend A>推导kt应该是那样写。我试过java文件转kt,转后的kt是报红有问题的,平时我不会写的kt都会用那个工具,可是这次连自带工具转换都不对的,所以得问老师你?


    比如这个老师,kt怎么写?

    http://img1.sycdn.imooc.com//climg/5fee007a09c58d8709660295.jpg

    2021-01-01 00:47:10
  • CrazyCodeBoy 回复 提问者 sleeping_cat #3
    abstract class Request<T, R : Request<*, R>> : Serializable {
    }

    在kotlin中需要指定Request的泛型。


    2021-01-04 09:55:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师