Kotlin声明[类型]的方式是通过实现接口还是继承类?

发布于 2022-09-13 01:19:43 字数 374 浏览 26 评论 0

实例化一个class的时候,赋值给一个变量,而变量的类型为类名,感觉class和type有点混在一起了。
1.class和type它们之间的关系到底是什么?
2.从标准库看,一个type的实现原理是什么?

//以此为例
var x:Int = 99;
class foo(val a:Int = 33)
var y:foo = foo();

个人想法:
常规理解来看就把":"后看作type就行,但是这样的话就又不好解释foo他又是个class,又不是常规的type。那么将他们都看作class,而x和y又不是类,这让我很困惑

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦在深巷 2022-09-20 01:19:43

emmm... 感觉你钻牛角尖了,这玩意儿区分它干啥?啥用都没有。

非要区分的话,它俩是两个层面上的东西。

Class(类)更多的是 OOP 里的概念,讲的是是对一类具有共同特征的事物的抽象。

Type(类型)更多的讲的是对一个对象定义的描述,它不光 OOP 里有、FP 里也有。

很绕是吧?绕就对了,绝大部分语境下两者描述的也都是一回事儿。所以当你看到一个文档里写了有 Type 和 Class,你要结合上下文去理解二者到底是有区别的还是没区别的。


举个具体的例子可能更加容易明白:

var x: Int = 0;
var y: Int? = 0;

xy 都是 Int 这个 Class 的实例,因为并不存在 Int? 这种 Class;但它俩是两个 Type,即你没法把一个 Int? 对象传给一个只接收 Int 形参的方法。

同样地也有:

var l1: List<String>;
var l2: List<Int>;

Class 层面上只有 List<T> 这一个 Class,List<String>List<Int> 都是定义上的 Type 而不是抽象里的 Class。


回到你的题目里,你的 foo 既是 Class 又是 Type,取决于你怎么看待它了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文