首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Kotlin】初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )

文章目录 一、lateinit 延迟初始化 ( ::属性名称.isInitialized 检查属性是否初始化 ) 二、lazy 惰性初始化 一、lateinit 延迟初始化 ( ::属性名称.isInitialized...检查属性是否初始化 ) ---- 在定义属性时 , 可以使用 lateinit 关键字 设置该属性 延迟初始化 , 在 实例对象 创建时不进行初始化 , 在使用该属性之前对其进行初始化即可 ; 对于...lateinit 延迟初始化 属性 , 在使用前可以执行 ::属性名称.isInitialized 检查 , 查看该属性是否进行了初始化操作 ; 代码示例 : class Hello{ lateinit...name 属性值为 Tom 二、lazy 惰性初始化 ---- lazy 惰性初始化 属性初始化操作 是 提前定义好 , 在 调用之前 自动进行初始化操作 , 如果不调用 , 则不进行初始化...; lateinit 延迟初始化 属性初始化操作 , 需要 手动进行初始化 , 如果忘了初始化直接调用就会报错 ; 代码示例 : class Hello{ val name by lazy

1.3K10

C++11属性成员初始化

在C++11中,大多数基础数据类型都可以直接初始化,可以不通过构造函数来初始化。还有一些仍旧是初始化。由于可能存在对C++11支持程度不同,以及编译器厂商是否对C++进行了扩展。...namespace std; class MyClass { public: static const int a = 3; const double b = 3.14; //为了保持静态属性成员是属于整个...,C++11做法和以前一样,依旧在外定义并初始化 static int c; //声明c double d = 100.001; char str[33] = "Hello World!"...这样初始化方式写起来也非常顺畅,比旧标准好得多。 学习新标准是非常有用,这样最重要是能让你避免对新代码产生一些误判。...尤其是当新标准所支持操作,在旧标准中并不支持时候,你就很可能发生误判。

94310
您找到你想要的搜索结果了吗?
是的
没有找到

【Kotlin】初始化 ③ ( init 初始化块 | 初始化顺序 : 主构造函数属性赋值 -> 类属性赋值 -> init 初始化块代码 -> 次构造函数代码 )

文章目录 一、init 初始化块 二、初始化顺序 一、init 初始化块 ---- 在 Kotlin 中 , 可以定义 init 初始化块 , 在其中可以为 变量赋值 , 执行一些检查相关代码 ,...该 init 初始化块在 创建实例对象 时执行 ; 代码示例 : 在下面的代码中 init 初始化块 中 , 对 name 属性进行了修改 , 检查了 age 属性是否合法 ; class Hello...时会执行一系列 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 中属性赋值 属性赋值 init 初始化块 中代码执行 次构造函数 中代码执行 代码示例 : 通过下面的代码分析 Kotlin...为 age 属性赋值 _age: Int ){ // 属性 var age = _age var type = "老鼠" var gender: String..., 这是在 主构造函数 中完成操作 ; 然后 , 为 age 和 type 属性赋值 , 这是在 age 属性进行赋值 , 使用是 主构造函数 中临时变量 ; 最后 , 为 gender

1.3K30

【Kotlin】Kotlin 继承 二 ( 属性覆盖 | 属性覆盖四种情况 | 常量 变量 属性覆盖 | 子类初始化属性覆盖 )

属性覆盖 : 属性覆盖与方法覆盖方式基本相同 ; ① 属性覆盖前提 : 在父中使用 open 修饰属性 , 可以在子类中被覆盖 ; ② 属性覆盖方式 : 在子类中使用 override 修饰被覆盖属性...子类初始化时考虑覆盖属性使用 ---- 1 . 子类初始化 : 子类初始化时 , 要先将父进行初始化 , 然后开始初始化子类 ; 2 ....父初始化流程 : ① 父构造函数 : 先调用主构造函数 / 次构造函数 ; ② 父初始化 : 然后调用父类属性构造器 和 init 初始化代码块 , 这两个模块优先级相同 , 根据其代码顺序从上到下执行...初始化过程中覆盖属性 : 这里加入对覆盖属性考虑 , 父初始化过程中 , 子类覆盖属性还没有初始化 , 父 open 属性可能在子类初始化过程中被修改 ; 5 ....最佳实践 : 在父中 , 尽量不在 构造函数 , init 初始化代码块 , 属性初始化 时使用被 open 关键字修饰可覆盖属性成员 , 因为该值不稳定 , 会增加不确定因素 ;

1.1K20

从零开始 Nest.js

Nest.js 久有耳闻了,但是一直没有时间去真正学习他,一直鸽子到了现在。我想借着学习 nest 先进思想,来重构我博客后端。...Nest.js 是一个基于 Express.js 渐进式 Web 框架,一提到 express 很多人就觉得性能太弱,不太适合使用,但是它生态好,也正是这一点 Nest.js 选择了 Express.js...路由 nest 中路由是位于一个被Controller装饰中,每个路由是该类中一个方法,该方法被Get``Post等装饰器装饰,而返回值则是响应对象。...在控制器对象上加上 ApiTags装饰器,即可对不同控制器加以分组。...,他通过调用 class-validator来识别该属性是否正确或者需要,已阻止不必要 nosql 注入。

1.6K20

深入理解 Nest.js 控制器:构建强大RESTful API

在本文中,我们将深入探讨 Nest.js 控制器工作原理和用法,为您提供有关如何构建强大 RESTful API 深入理解。什么是 Nest.js 控制器?...创建一个 Nest.js 控制器要创建一个 Nest.js 控制器,您需要首先创建一个,并使用 @Controller() 装饰器来定义路由前缀。...然后,您可以在中定义不同 HTTP 请求处理方法,这些方法会与不同路由端点相关联。让我们通过一个示例来创建一个简单控制器,用于处理用户资源 CRUD 操作。...// 处理删除用户请求 }}上述代码创建了一个名为 UsersController 控制器,使用 @Controller('users') 定义了路由前缀为 '/users'。...当异常被捕获时,我们异常中获取状态码和消息,并将其包装成 JSON 响应发送给客户端。

34220

Nuxt.js,Next.js,Nest.js傻傻分不清?

npx nuxi@latest init cd project-name npm i npm run dev 这就创建项目之后初始化页面了。...$ npm i -g @nestjs/cli $ nest new project-name 定义控制器:在 src 目录下创建您控制器文件,每个文件将映射到一个路由。...$ npm run start 使用nest写增删改查 要使用 Nest.js 编写增删改查(CRUD)接口,您可以按照以下步骤进行操作: 创建控制器:使用 Nest CLI 创建一个控制器文件,该文件将包含处理请求方法...注册控制器:在模块文件中,将控制器注册到相应模块中。您可以使用装饰器 @Module 和 controllers 属性来完成这一步骤。...它结合了 TypeScript(或 JavaScript)和面向对象编程概念,使得开发者可以使用、装饰器和依赖注入等技术来构建可维护和可测试应用。

2.3K30

Dart 中定义、构造函数、私有属性和方法、set与get、初始化列表

Dart是一门使用和单继承面向对象语言,所有的对象都是实例,并且所有的都是Object子类。 1. Dart定义 ? 2. Dart构造函数 ? 3....Dart中命名构造函数 ? 4. Dart中将抽离成一个单独模块 首先将模块写到一个单独文件中,如下图所示为public文件夹下Person.dart为一个单独。 ?...Dart中私有属性和私有方法 Dart和其他面向对象语言不一样,没有 public、private、protected这些访问修饰符,但是我们可以使用下划线把一个属性或者方法定义成私有。...需要注意是,定义为私有属性和私有方法必须要抽离放在一个单独文件中,然后才能真正起到私有的效果。 首先将含有私有属性或私有方法放在一个单独模块中。 ?...在文件中引入含有私有属性和私有方法。 ? 6. Dart中get与set修饰符 ? 7. Dart中初始化列表 Dart中可以在构造函数体运行之前初始化实例变量。 ?

6K40

Nest.js 实践总结分享

回复1,加入高级Node交流群 Nest.js 是一个现代企业级 Node.js Web 框架,最近在使用 Nest.js 实践一些项目的总结了一些使用心得,也从中学到了很多东西,在这里总结下来和大家分享...此外,如果你不遵守此原则,Nest.js 可能会在构建过程中崩溃。 3. 使用 DTOs DTO = 数据传输对象。Dtos 就像接口,目标是传输数据并验证它,主要用于路由器 / 控制器。...使用 Exclude 来隐藏不必要数据 使用过滤器数据库中获取数据是很常见。过滤器整个目标是删除或格式化来自数据库数据。这会导致很多垃圾逻辑,使代码变得更冗余。...使用实体 getter 方法 一些通用逻辑可以作为属性直接添加到你实体逻辑里。...使用集中命名导出 你可以同一个文件夹中导入所有,而不是从不同文件中导入你。如有以下目录: // index.ts export * from '.

1.9K10

Nest.js 实践总结

Nest.js 是一个现代企业级 Node.js Web 框架,最近在使用 Nest.js 实践一些项目的总结了一些使用心得,也从中学到了很多东西,在这里总结下来和大家分享。 1....此外,如果你不遵守此原则,Nest.js 可能会在构建过程中崩溃。 3. 使用 DTOs DTO = 数据传输对象。Dtos 就像接口,目标是传输数据并验证它,主要用于路由器 / 控制器。...使用 Exclude 来隐藏不必要数据 使用过滤器数据库中获取数据是很常见。过滤器整个目标是删除或格式化来自数据库数据。这会导致很多垃圾逻辑,使代码变得更冗余。...使用实体 getter 方法 一些通用逻辑可以作为属性直接添加到你实体逻辑里。...使用集中命名导出 你可以同一个文件夹中导入所有,而不是从不同文件中导入你。如有以下目录: // index.ts export * from '.

1.7K20

后端开发效率:缓存关键作用

让我们探讨缓存基本原理。 本质上讲,缓存涉及临时存储数据库中检索数据。当对相同数据发出后续请求时,后端应用程序会无缝地传递缓存数据,而不是等待 API 再次检索它。...此外,我们初始化了一个参数对象来配置我们缓存存储。这些参数包括: store:定义要使用缓存存储。 host:指定我们 Redis 数据库将运行服务器。...在注入缓存管理器之后,我们在控制器中定义了一个名为 getSampleData 函数。此函数负责返回一个包含属性对象,例如 id(字符串)、items(数字数组)和 users(字符串数组)。...在内部,此函数调用另一个方法,getSampleData,它位于 app.service.ts 文件中定义 AppService 中。...因此,该函数返回类型已更新为一个 promise,用来解决包含预定义属性对象。 收到请求后,控制器首先检查是否存在与键 "UD" 对应缓存数据。

7610

学完这篇 Nest.js 实战,还没入门来锤我!(长文预警)

@Module() 装饰器接收四个属性:providers、controllers、imports、exports。...@Controller 如每一个要成为控制器,都需要借助@Controller装饰器装饰,该装饰器可以传入一个路径参数,作为访问这个控制器主路径: 对app.controller.ts文件进行修改...数据库我选择是Mysql,毕竟实际项目中大多数还是选择它。因为文章属于零教程, 所以会包含数据库安装、连接、使用以及使用过程遇到坑,如果你是有经验老手,可以跳过这部分。...,这里涉及到单一设计原则,因为每一个应该处理一件事,最好只处理一件事。...: 管道是具有 @Injectable() 装饰器

9.3K11

学完这篇 Nest.js 实战,还没入门来锤我!(长文预警)

@Module() 装饰器接收四个属性:providers、controllers、imports、exports。...@Controller 如每一个要成为控制器,都需要借助@Controller装饰器装饰,该装饰器可以传入一个路径参数,作为访问这个控制器主路径: 对app.controller.ts文件进行修改...数据库我选择是Mysql,毕竟实际项目中大多数还是选择它。因为文章属于零教程, 所以会包含数据库安装、连接、使用以及使用过程遇到坑,如果你是有经验老手,可以跳过这部分。...,这里涉及到单一设计原则,因为每一个应该处理一件事,最好只处理一件事。...: 管道是具有 @Injectable() 装饰器

12.1K42

Nest.js 是如何实现 AOP 架构

一个请求过来,可能会经过 Controller(控制器)、Service(服务)、Repository(数据库访问) 逻辑: 如果想在这个调用链路里加入一些通用逻辑该怎么加呢?...: 创建 Guard 方式是这样: Guard 要实现 CanActivate 接口,实现 canActive 方法,可以 context 拿到请求信息,然后做一些权限验证等处理之后返回 true...内置有 8 个 Pipe,名字就能看出它们意思: ValidationPipe ParseIntPipe ParseBoolPipe ParseArrayPipe ParseUUIDPipe DefaultValuePipe...把这些理清楚,就算是对 Nest.js 有很好掌握了。 总结 Nest.js 基于 express 这种 http 平台做了一层封装,应用了 MVC、IOC、AOP 等架构思想。...IOC 是指 Nest.js 会自动扫描带有 @Controller、@Injectable 装饰器,创建它们对象,并根据依赖关系自动注入它依赖对象,免去了手动创建和组装对象麻烦。

1.1K10

【Kotlin】初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员 getter 和 setter 方法 | 计算属性 )

文章目录 一、Kotlin 自动为成员字段生成 getter 和 setter 方法 二、手动设置成员 getter 和 setter 方法 三、计算属性 一、Kotlin 自动为成员字段生成 getter...和 setter 方法 ---- 定义 Kotlin , 在 中 定义成员属性 , 会自动生成 getter 和 setter 方法 ; 在 Kotlin 中定义如下 , 在其中定义两个字段...结果 如下 : 二、手动设置成员 getter 和 setter 方法 ---- Kotlin 会为 每个 成员属性 生成一个 field , getter , setter ; field...---- 如果 Kotlin 某个属性 是 通过计算得到 , 可以 在该属性 getter 和 setter 方法中进行计算设置或获取结果 , 不使用 field 属性 ; 下面的 age...属性就是通过计算得到属性值 , 每次获取都是 0 ~ 100 之间随机值 , 没有使用到 field ; val age get() = Math.random() * 100

1.5K20

手把手教你学会部署Nestjs项目

/deploy/mysql/init:/docker-entrypoint-initdb.d/ # 存放初始化脚本         networks:              - my-server...单击新建应用,选择Web 应用>Nest.js 框架,如下图所示: 单击“下一步”,完成基础配置选择 上传方式,选择示例代码直接部署,单击完成,即可开始应用部署。...部署完成后,您可在应用详情页面,查看示例应用基本信息,并通过 API 网关生成访问路径 URL 进行访问,查看您部署 Nest.js 项目 自定义部署nest 初始化 Nest.js 项目...部署上云 接下来执行以下步骤,对已初始化项目进行简单修改,使其可以通过 Web Function 快速部署,此处项目改造通常分为以下两步: 新增 scf_bootstrap 启动文件。...单个函数代码体积 500mb 上限。在实际操作中,云函数虽然提供了 500mb 关于绕过配额问题: 如果不多,那么使用 npm install --production 就能解决问题

4.3K73

Nest.js进阶系列四:Node.js中使用Redis原来这么简单!

排行系统 利用Redis列表和有序集合特点,可以制作排行榜系统,而排行榜系统目前在商城、新闻、博客等等,都是比不可缺。...在Nest.js中使用 版本情况: 库 版本 Nest.js V8.1.2 项目是基于Nest.js 8.x版本,与Nest.js 9.x版本使用有所不同, 后面的文章专门整理了两个版本使用不同点说明..., 以及如何V8升级到V9, 这里就不过多讨论。...方法采用 Redis Store 配置进行通信 store 属性值redisStore ,表示'cache-manager-redis-store' 库 isGlobal 属性设置为true 来将其声明为全局模块...前端小伙伴们更好入门一个优秀 Node 框架 该系列会持续更新,感兴趣小伙伴可以star一下,感谢 回顾一下【Nest入门系列文章】 Nest.js 手把手带你实战-项目创建&数据库操作 Nest.js

2.2K30

看看 Nest.js 怎么用

如果不知道怎么用的话,不妨来看下 Nest.js 是怎么用吧: 案例 1 Nest.js 除了支持跑一个单独 http 服务之外,还支持微服务,微服务一般就不是直接处理 http 了,可能是和 Redis...各种不同中间件客户端连接方式不同,而 Nest.js 希望把它们统一管理起来。 怎么统一管理呢?...它内置了 7 个实现,分别实现了 Grpc、Redis、Kafka、MQTT、Nats、RebbitMQ、TCP 连接建立和断开方式: 还继承了一个 Server ,这个里定义公用一些属性和方法...然后它又创建了一个工厂来根据参数创建不同策略: 这样代码使用时候是这样: 通过 transport 指定不同传输方式,然后传入 options 即可。...这样就实现了灵活扩展策略需求。 这种灵活性是通过策略模式来实现,这就是设计模式好处。

1.4K40
领券