首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin 委托属性Android开发几个使用场景!

如你所见,委托属性并没有什么神奇。但是,它虽然简单,却非常有用,让我们来看一些 Android 开发例子。 你可以官方文档中了解更多关于委托属性内容。...所以让我们来写一个扩展函数用于往Bundle 存储某种类型值,类型不支持时候抛出异常。...这个委托也可以使用相同键来SharedPreferences存储属性新值。 为了让我们例子能工作,我们还需要为String?...方法渲染布局之后初始化属性,因为控件不能为null。...总结 我们看来一些 Android 开发中使用 Kotlin 委托属性例子。当然了,你也可以用别的方式来使用它。 这篇文章目标是展示委托属性是多么强大,以及我们可以用它做什么。

4.6K41

【错误记录】Kotlin 代码运行时报错 ( init 初始化调用还未初始化成员属性 )

文章目录 一、报错信息 二、问题分析 三、解决方案 该问题本质就是 , 成员属性 init 初始化代码块中进行初始化 , 但是初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常...角度分析 上述代码执行顺序 , Kotlin 类 对象实例化 时会执行一系列 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 属性赋值 类属性赋值 init 初始化代码执行...次构造函数 代码执行 首先 , 上述代码没有主构造 函数 , 因此该项忽略 ; 然后 , 执行属性赋值 , 代码定义了 name 属性 , 但是没有进行赋值 ; var name: String...再后 , 执行 init 初始化块 , 其中先执行 nameFirstLetter 函数 , 该函数调用了 fun nameFirstLetter() = name[0] name 属性 ,...} 该问题本质就是 , 成员属性 init 初始化代码块中进行初始化 , 但是初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常 ; 三、解决方案 ---- 调换 初始化代码块

1.7K10

【Android Gradle 插件】Gradle 扩展属性 ② ( 定义根目录 build.gradle 扩展属性 | 使用 rootProject.扩展属性名访问 | 扩展属性示例 )

文章目录 一、定义根目录 build.gradle 扩展属性 二、扩展属性示例 Android Plugin DSL Reference 参考文档 : Android Studio 构建配置官方文档.../current/javadoc/org/gradle/api/Project.html 如果将 ext 扩展属性放到 Android 工程根目录下 build.gradle 构建脚本 , 则所有的...Module 模块下 build.gradle 都可以获取到该扩展属性值 ; Module 下 build.gradle 可以使用 rootProject.扩展属性名 来访问定义根目录...build.gradle 定义扩展属性值 ; 二、扩展属性示例 ---- 根目录下 build.gradle 定义扩展属性 : // 定义扩展属性 , 其中变量对所有子项目可见 ext {..., 其中变量对所有子项目可见 ext { hello1 = 'Hello World1!'

2.9K20

【实战技巧】CSS自定义属性以及VUE3使用

---- 什么是css自定义属性 官方称之为 自定义属性 ,但我比较习惯叫它 变量 ,简单点说就是一种开发者可以自主命名和使用 CSS 属性. CSS变量和预处理器变量有什么不同?...CSS变量是浏览器中直接可用CSS属性,而预处理变量是用于编译成常规CSS代码,浏览器其实对它们一无所知。...我们可以 样式表 内联样式 SVG标签 中直接使用CSS变量,甚至可以 运行时 用JavaScript直接修改它。但是我们是 无法 对预处理器变量做上面这些操作.....foo { color: red; --theme-color: gray; } 我们可以用CSS自定义元素存储任意有效css属性值,比如 .foo { --theme-color: blue...VUE3.0,可以CSS中使用 响应式变量, 通过下图可以看出,它原理就是运用了CSS自定义属性 我们先在HelloWorld.vue写入下方代码,我们使用定时器两秒以后修改color值,

2.6K20

项目文件 csproj 或者 MSBuild Target 中使用 % 引用集合每一项属性

在编写项目文件或者 MSBuild Target 文件时候,我们经常会使用 来定义集合一项。定义同时,我们也会额外指定一些属性。...然而这些属性如何拿到并且使用呢?本文将介绍使用方法。 ---- 将下面的代码放到你项目文件末尾,最后一个 前面,可以在编译时候看到两个新警告。...WalterlvX 集合时候,我们使用了 @(Compile) 来获取所有需要编译文件。...于是,你警告信息中看到两个警告信息里面,一个输出了 Compile 集合每一项标识符(通常是相对于项目文件路径),另一个输出了每一个 Compile 项 FileName 属性。...FileName 属性是 Compile 会被 Microsoft.NET.Sdk 自动填充。 需要注意,如果 % 得到某个属性为空,那么这一项最终形成新集合是不存在

21150

使用PostgreSQLDO块或存储过程实现数据库初始化脚本幂等性

许多软件项目中,数据库初始化脚本编写都是一个重要步骤,它负责为系统创建必要数据库和用户。...今天,我们就以PostgreSQL数据库为例,介绍如何使用DO块或存储过程来实现脚本幂等性。 什么是幂等性? 计算机科学,幂等性是一个重要概念。...然而,存储过程和DO块也有一些重要区别: 存储过程是有名称,并且可以接受参数。这意味着你可以多次调用同一个存储过程,而且每次调用时,可以使用不同参数。 存储过程定义之后,会被保存在数据库。...这意味着你可以多个查询或者会话调用同一个存储过程。而DO块代码执行之后,就会被丢弃,不会被保存在数据库存储过程可以返回结果,这意味着你可以使用存储过程来查询数据,或者计算一些值。...结论 在编写数据库初始化脚本时,通过合理使用PostgreSQLDO块或存储过程,我们可以有效地实现脚本幂等性,这对于系统升级和数据库维护来说,是非常重要和有用

63410

Spring Bean实例过程,如何使用反射和递归处理Bean属性填充?

其实还缺少一个关于类是否有属性问题,如果有类包含属性那么实例化时候就需要把属性信息填充上,这样才是一个完整对象创建。...不过这里我们暂时不会考虑 Bean 循环依赖,否则会把整个功能实现撑大,这样新人学习时就把握不住了,待后续陆续先把核心功能实现后,再逐步完善 三、设计 鉴于属性填充是 Bean 使用 newInstance...六、总结 本章节我们把 AbstractAutowireCapableBeanFactory 类创建对象功能又做了扩充,依赖于是否有构造函数实例化策略完成后,开始补充 Bean 属性信息。...当遇到 Bean 属性为 Bean 对象时,需要递归处理。最后属性填充时需要用到反射操作,也可以使用一些工具类处理。...另外在框架实现过程中所有的类名都会参考 Spring 源码,以及相应设计实现步骤也是与 Spring 源码对应,只不过会简化一些流程,但你可以拿相同类名,去搜到每一个功能在 Spring 源码实现

3.3K20

掌握 C# 变量:代码声明、初始化使用不同类型综合指南

C# ,有不同类型变量(用不同关键字定义),例如: int - 存储整数(没有小数点整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99...int(整数)变量): int x = 5; int y = 6; Console.WriteLine(x + y); // 打印 x + y 值 从上面的示例,您可以预期: x 存储值 5 y...存储值 6 然后我们使用 WriteLine() 方法来显示 x + y 值,即 11 C# 多个变量 声明多个变量: 要声明同一类型多个变量,请使用逗号分隔列表: int x = 5, y =...(x + y + z); 第一个示例,我们声明了三个 int 类型变量(x、y 和 z),并为它们赋了不同值。...第二个示例,我们声明了三个 int 类型变量,然后将它们都赋予了相同值 50。 C# 标识符 所有的 C# 变量都必须使用唯一名称来标识。 这些唯一名称被称为标识符。

31510

arcengine+c# 修改存储文件地理数据库ITable类型表格某一列数据,逐行修改。更新属性表、修改属性表某列值。

作为一只菜鸟,研究了一个上午+一个下午,才把属性更新修改搞了出来,记录一下: 我需求是: 已经文件地理数据库存放了一个ITable类型表(不是要素类FeatureClass),注意不是要素类...FeatureClass属性表,而是单独一个ITable类型表格,现在要读取其中某一列,并统一修改这一列值。...表ArcCatalog打开目录如下图所示: ? ?...读取属性列并修改代码如下:            IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.WhereClause...string strValue = row.get_Value(fieldindex).ToString();//获取每一行当前要修改属性值 string newValue

9.5K30

swift 构造器

,swift构造器无需返回值,主要任务是保证新实例第一次使用前完成正确初始化存储属性初始化值 类和结构体创建实例时,必须为所有存储类型设置初始值 可以构造器设置, 也可以声明属性时候就给定...结构体默认初始化 如果结构体没有提供自定义构造器,它们将自动获得一个逐一成员构造器,即使结构存储属性没有默认值 逐一成员构造器通过与成员属性名相同参数名进行传值来完成对成员属性初始化赋值 struct...类则会有从父类继承构造器情况要考虑, 不过还是那句话, 所有存储属性构造器中都完成初始化就可以. 对于值类型,你可以使用self.init自定义构造器引用相同类型其它构造器。...类初始化有两阶段 第一阶段,每个存储属性分配一个初始值 第二阶段,每个类实例在被使用之前进一步定义其存储属性 第一阶段 • 某个指定构造器或便利构造器被调用 • 完成新实例内存分配,...4.构造器第一阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性值,不能引用self作为一个值 构造器继承和重写 跟 OC 子类不同,Swift 子类默认情况下不会继承父类构造器

17210

Swift基础 初始化

存储属性设置初始值 类和结构必须在创建该类或结构实例时将其所有存储属性设置为适当初始值。存储属性不能处于不确定状态。...这意味着类有额外责任来确保初始化期间为其继承所有存储属性分配合适值。这些职责在下面的类继承和初始化描述。...第一阶段,引入它类为每个存储属性分配一个初始值。一旦确定了每个存储属性初始状态,第二阶段就开始了,每个类都有机会在新实例被认为可供使用之前进一步自定义其存储属性。...使用两阶段初始化过程使初始化安全,同时仍然为类层次结构每个类提供完全灵活性。两阶段初始化可以防止属性初始化之前被访问,并防止属性值意外地被另一个初始化器设置为不同值。...如上所述,只有当对象所有存储属性初始状态已知时,对象内存才会被视为完全初始化。为了满足此规则,指定初始化器必须确保其所有自己属性启动链条之前都已初始化

14900

Swift进阶七——面向对象编程

一旦每个存储属性初始状态都被确定,第一个阶段就会结束,第二个阶段就开始了。 第二个阶段,每个类都有机会在新实例准备使用之前来定制它存储属性。...两段式初始化安全检查 指定初始化器必须保证,向上委托给父类初始化之前,其所在类引入所有属性都要初始化完成。 指定初始化器必须先向上委托父类初始化器,然后才能为继承属性设置新值。...如果不这样做,便捷初始化器赋予新值都将被自己类其他指定初始化器所覆盖。 初始化第一阶段初始化完成之前,不能调用任何实例方法,不能读取任何实例属性值,也不能引用self作为值。...两段式初始化过程 阶段一 指定或者便捷初始化类中被调用 为这个类新实例分配内存。此时,内存还没有被初始化 这个类指定初始化器确保所有由此类引入存储属性都有一个值。...,链顶部类会确保所有存储属性都有一个值,此时内存会被认为完全初始化了,此时第一阶段完成 阶段二 从顶部初始化器往下,链每一个指定初始化器都有机会进一步定制实例。

95740

Swift基础 扩展

Swift扩展可以: 添加计算实例属性和计算类型属性 定义实例方法和类型方法 提供新初始化器 定义下标 定义和使用嵌套类型 使现有类型符合协议 Swift ,您甚至可以扩展协议,以提供其要求实现...注意 如果您定义了一个扩展来向现有类型添加新功能,则该新功能将在该类型所有现有实例上可用,即使它们是定义扩展之前创建。 计算属性 扩展可以将计算实例属性和计算类型属性添加到现有类型。...如果您使用扩展程序将初始化器添加到为其所有存储属性提供默认值且不定义任何自定义初始化值类型,您可以从扩展初始化调用该值类型默认初始化器和成员初始化器。...如果您使用扩展程序将初始化器添加到另一个模块声明结构,则新初始化器在从定义模块调用初始化之前无法访问self。 下面的示例定义了一个自定义Rect结构来表示几何矩形。...然后,初始化器调用结构自动成员初始化器init(origin:size:)该初始化器将新原点和大小值存储适当属性: let centerRect = Rect(center: Point(x:

9000
领券