avatar
文章
864
标签
158
分类
0

主页
文章归档
文章标签
文章归类
文章列表
  • Music
  • Movie
友情链接
关于我
麦溪·在路上
主页
文章归档
文章标签
文章归类
文章列表
  • Music
  • Movie
友情链接
关于我

麦溪·在路上

可见性修饰符
发表于2022-01-05
[TOC] 可见性修饰符类、对象、接口、构造函数、方法、属性和它们的 setter 都可以有 _可见性修饰符_。(getter 总是与属性有着相同的可见性。)在 Kotlin 中有这四个可见性修饰符:private、 protected、 internal 和 public。如果没有显式指定修饰符的话,默认可见性是 public。 以下解释了这些修饰符如何应用到不同类型的声明作用域。 包函数、属性和类、对象和接口可以在顶层声明,即直接在包内: 12345// 文件名:example.ktpackage foofun baz() { …… }class Bar { …… } 如果你不指定任何可见性修饰符,默认为 public,这意味着你的声明将随处可见; 如果你声明为 private,它只会在声明它的文件内可见; 如果你声明为 internal,它会在相同模块内随处可见; protected 不适用于顶层声明。 注意:要使用另一包中可见的顶层声明,仍需将其导入进来。 例如: 123456789// 文件名:example.ktpackag ...
Kotlin中的扩展相关学习
发表于2022-01-05
[TOC] 扩展Kotlin 能够扩展一个类的新功能而无需继承该类或者使用像装饰者这样的设计模式。这通过叫做扩展的特殊声明完成。 For example, you can write new functions for a class from a third-party library that you can’t modify.Such functions are available for calling in the usual way as if they were methods of the original class.This mechanism is called extension functions. There are also extension properties that let you definenew properties for existing classes. 上面的介绍翻译过来就是: 例如:你可以为三方库中的不能修改的类来增加新的函数。 扩展函数声明一个扩展函数,我们需要用一个接收者类型也就是被扩展的类型来作为他的前缀。 下面代码为 Mu ...
Kotlin中数据类的学习
发表于2022-01-05
[TOC] 数据类我们经常创建一些只保存数据的类。在这些类中,一些标准函数往往是从数据机械推导而来的。在 Kotlin 中,这叫做 数据类 并标记为 data: 1data class User(val name: String, val age: Int) 编译器自动从主构造函数中声明的所有属性导出以下成员: equals()/hashCode() 对; toString() 格式是 "User(name=John, age=42)"; componentN() 函数 按声明顺序对应于所有属性; copy() 函数(见下文)。 为了确保生成的代码的一致性以及有意义的行为,数据类必须满足以下要求: 主构造函数需要至少有一个参数; 主构造函数的所有参数需要标记为 val 或 var; 数据类不能是抽象、开放、密封或者内部的; (在1.1之前)数据类只能实现接口。 此外,成员生成遵循关于成员继承的这些规则: 如果在数据类体中有显式实现 equals()、 hashCode() 或者 toString(),或者这些函数在父类中有final{: ...
泛型的学习
发表于2022-01-05
[TOC] 泛型与 Java 类似,Kotlin 中的类也可以有类型参数: 123class Box<T>(t: T) { var value = t} 一般来说,要创建这样类的实例,我们需要提供类型参数: 1val box: Box<Int> = Box<Int>(1) 但是如果类型参数可以推断出来,例如从构造函数的参数或者从其他途径,允许省略类型参数: 1val box = Box(1) // 1 具有类型 Int,所以编译器知道我们说的是 Box<Int>。 型变Java 类型系统中最棘手的部分之一是通配符类型(参见 Java Generics FAQ)。而 Kotlin 中没有。 相反,它有两个其他的东西:声明处型变(declaration-site variance)与类型投影(type projections)。 首先,让我们思考为什么 Java 需要那些神秘的通配符。在 《Effective Java》第三版 解释了该问题——第 31 条:利用有限制通配符来提升 API 的灵活性。首先,Java ...
密封类的学习
发表于2022-01-05
[TOC] 密封类密封类用来表示受限的类继承结构:当一个值为有限几种的类型、而不能有任何其他类型时。 在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。 要声明一个密封类,需要在类名前面添加 sealed 修饰符。 虽然密封类也可以有子类,但是所有子类都必须在与密封类自身相同的文件中声明。(在 Kotlin 1.1 之前, 该规则更加严格:子类必须嵌套在密封类声明的内部)。 要定义一个密封类,只需在定义类名前加上 sealed 关键字。比如对于上面的例子,可以这样定义 Expr 类: 1234sealed class Exprdata class Const(val number: Double) : Expr()data class Sum(val e1: Expr, val e2: Expr) : Expr()object NotANumber : Expr() (上文示例使用了 Kotlin 1.1 的一个额外的新功能:数据类扩展包括密封类在内的其他类的可能性。) 因为密封类是一个抽象类,所 ...
嵌套类与内部类的学习
发表于2022-01-05
[TOC] 嵌套类与内部类类可以嵌套在其他类中: 12345678class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 }}val demo = Outer.Nested().foo() // == 2 内部类标记为 inner 的嵌套类能够访问其外部类的成员。内部类会带有一个对外部类的对象的引用: 12345678class Outer { private val bar: Int = 1 inner class Inner { fun foo() = bar }}val demo = Outer().Inner().foo() // == 1 参见限定的 this 表达式以了解内部类中的 this的消歧义用法。 匿名内部类使用对象表达式创建匿名内部类实例: 123456window.addMouseListener(object : MouseAdapte ...
Kotlin之对象表达式与对象声明
发表于2022-01-05
[TOC] 概述object 关键字在 kotlin 中有两种使用场景:对象表达式 (object expressions)和对象声明(object declarations)。本文将对这两种使用场景分别说明。 对象表达式有时候,我们需要创建一个对某个类做了轻微改动的类的对象,而不用为之显式声明新的子类。Java 用匿名内部类 处理这种情况。 Kotlin 用对象表达式和对象声明对这个概念稍微概括了下。 创建继承某个(或某些)类型的匿名类的对象,这些类型可以是接口(以给 Button 设置点击事件为例): 123456789101112class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button = findV ...
Kotlin之委托属性学习
发表于2022-01-05
[TOC] 委托属性有一些常见的属性类型,虽然我们可以在每次需要的时候手动实现它们,但是如果能够为大家把他们只实现一次并放入一个库会更好。例如包括: 延迟属性(lazy properties): 其值只在首次访问时计算; 可观察属性(observable properties): 监听器会收到有关此属性变更的通知; 把多个属性储存在一个映射(map)中,而不是每个存在单独的字段中。 为了涵盖这些(以及其他)情况,Kotlin 支持 委托属性: 123class Example { var p: String by Delegate()} 语法是: val/var <属性名>: <类型> by <表达式>。在 by{:.keyword} 后面的表达式是该 _委托_,因为属性对应的 get()(与 set())会被委托给它的 getValue() 与 setValue() 方法。属性的委托不必实现任何的接口,但是需要提供一个 getValue() 函数(与 setValue()——对于 var{:.keyword} ...
C语言库函数之calloc函数
发表于2022-01-05
[TOC] 概述C 库函数 void *calloc(size_t nitems, size_t size) 分配所需的内存空间,并返回一个指向它的指针。malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。 函数声明下面是 calloc() 函数的声明。 1void *calloc(size_t nitems, size_t size) 参数 nitems – 要被分配的元素个数。 size – 元素的大小。 返回值该函数返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。 实现下面的实例演示了 calloc() 函数的用法。 12345678910111213141516171819202122232425#include <stdio.h>#include <stdlib.h> int main(){ int i, n; int *a; printf("要输入的元素个数:"); scanf("%d",& ...
Android之性能监控框架
发表于2022-01-05
[TOC] 概述struct timeval结构体在time.h中的定义为: 1struct timeval { time_t tv_sec; /* Seconds. */ suseconds_t tv_usec; /* Microseconds. */ }; 其中,tv_sec为Epoch到创建struct timeval时的秒数,tv_usec为微秒。 struct timeval结构体在time.h中的定义为: 12345struct timeval{time_t tv_sec; /* Seconds. */suseconds_t tv_usec; /* Microseconds. */}; 其中,tv_sec为Epoch到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。比如当前我写博文时的tv_sec为1244770435,tv_usec为442388,即当前时间距Epoch时间1244770435秒,442388微秒。 123456789101112int i;for (i = 0; i < ...
1…252627…87
avatar
Frewen.Wang
在青麦地上跑着,雪和太阳的光芒
文章
864
标签
158
分类
0
关注我
公告
This is my Blog
最新文章
无题2023-12-22
无题2023-07-28
无题2023-07-27
基于Windows11安装Ubuntu双系统2023-07-20
无题2023-07-17
标签
系统源码 滤波算法 工具使用 云存储 卷积神经 Linux Android框架 STL函数 Activity pytorch NEON 编译脚本 go 渲染机制 OpenGL 编程工具 虚函数 RectNative JVM Linux命令 Kotlin基础 OpenMP AI const IDEA QNN C++ SELinux 目标检测 软件安装 threading 量化方法 四大组件 编译构建 SystemServer 开源项目 unique_ptr Java基础 系统安装 BroadcastReceiver
归档
  • 十二月 20231
  • 七月 20234
  • 六月 20231
  • 四月 20231
  • 三月 20232
  • 二月 202311
  • 一月 20232
  • 十二月 20221
网站资讯
文章数目 :
864
本站总字数 :
778.1k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2023 By Frewen.Wang
框架 Hexo|主题 Butterfly