十一、扩展和补充

扩展和补充

  • 类与对象
    • 获取类的class
    • 静态属性
    • 对象表达式
    • 静态内部类
    • 私有set方法
    • 返回null类型
  • 注解
    • 数组属性
  • 常用函数
    • use函数
  • spring
    • 自动加open

类与对象

获取类的class

val kClass: KClass<Any> = Any::class
val clazz: Class<Any> = Any::class.java

在 Kotlin 中,::class::class.java 返回的类型和用途有所不同。前者用于 Java 的反射和与 Java 代码交互,后者用于 Kotlin 的类型检查和反射。

KClass 是 Kotlin 提供的运行时类型信息的类,它提供了很多关于类本身的信息,比如类名、父类、成员函数等。KClass 是类型安全的,并且只能用于 Kotlin 代码中。

class 是 Java 的运行时类型信息表示。Class 对象提供了 Java 反射 API 的入口,允许你在运行时查询和操作类的各种信息。这个对象通常用于与 Java 框架或库交互,或者当你需要使用 Java 的反射功能时。

静态属性

在kotlin中,如果想要在类中定义静态变量,有两种方法(不算单例类):

  • 顶层级变量:在该类文件中类的外部定义变量
  • 伴生对象变量:使用companion object关键字在类内部定义伴生对象,可以使用@JvmStatic注解简化操作。

对象表达式

在Kotlin中,对象表达式允许你在不定义类的情况下创建一个对象的实例。对象表达式在语法上类似于一个匿名内部类,但更简洁。

interface MyInterface {  
    fun doSomething()  
}  
  
fun main() {  
    val myObject: MyInterface = object : MyInterface {  
        override fun doSomething() {  
            println("Doing something...")  
        }  
    }  
  
    myObject.doSomething() // 输出 "Doing something..."  
}

静态内部类

定义静态内部类时,不需要要加inner关键字。但此时内部类就无法持有外部类的引用的(无法this@外部类目),因为它相当于一个独立的类,不是作为实例属性

私有set方法

私有化set

class User {
	var username: String? = null
		private set
}

返回null类型

java中的void对应kotlin中的Unit,java的null则对应kotlin中的 Nothing

注解

数组属性

kotlin中注解属性为数组的,表示形式从{}变成[]了,并且Class类型的属性用KClass替代了。

常用函数

use函数

java7引入的try-with-resources语法糖可以自动关闭流对象,在kotlin中可以用use方法达到类似效果。

FileOutputStream(path).use { fos ->  
	try {  
		fos.write(data)  
		// 你可以在这里添加更多的文件操作代码  
	} catch (e: IOException) {  
		e.printStackTrace()  
		// 处理异常  
	}  
  }  

spring

自动加open

在springboot中使用kotlin中,由于类和类的方法默认是final的,不可继承,这会导致使用AOP机制时出现问题,可以通过第三方依赖让加了指定注解的类指定添加open关键字。

配置文档:全开放编译器插件 |Kotlin 文档 (kotlinlang.org)

<properties>
    <java.version>11</java.version>
    <kotlin.version>1.9.10</kotlin.version>
    <spring-boot.version>2.7.6</spring-boot.version>
</properties>
<dependencies>
    <!--使用kotlin需要的依赖(库和运行时环境)-->
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib-jdk8</artifactId>
        <version>${kotlin.version}</version>
    </dependency>
    <dependency>
        <groupId>org.jetbrains.kotlinx</groupId>
        <artifactId>kotlinx-coroutines-core</artifactId>
        <version>1.7.2</version>
    </dependency>
</dependencies>


<build>
    <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-plugin</artifactId>
            <configuration>
                <args>
                    <arg>-Xjsr305=strict</arg>
                </args>
                <compilerPlugins>
                    <!--allopen依赖配置好后,在加上下面spring插件的配置,可以让一些spring相关的注解自动启用allopen的功能-->
                    <plugin>spring</plugin>
                    <plugin>all-open</plugin>
                </compilerPlugins>
                <pluginOptions>
                    <!--指定有哪些注解的类自动加上open-->
                    <option>all-open:annotation=org.springframework.validation.annotation.Validated</option>
                </pluginOptions>
                <option>all-open:annotation=org.springframework.web.bind.annotation.RestControllerAdvice</option>
                <option>all-open:annotation=org.springframework.context.annotation.Configuration</option>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.jetbrains.kotlin</groupId>
                    <artifactId>kotlin-maven-allopen</artifactId>
                    <version>${kotlin.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

注:

  • <plugin>spring</plugin>:支持的注解包括下面这些,以这些注解为元注解的注解同样生效。

    • @Compoent
    • @Async
    • @Transactional
    • @Cacheable
    • @SpringBootTest
  • 数据类不能被继承,数据需要改为普通类并使用open才能被继承

  • Validated注解修饰参数时,参数的类型并不会自动加上open,因为kotlin-maven-allopen只作用于类级别的注解

    • 解决方法:可以自定义一个注解,给对应的类加上该注解,并在allopen插件中配置好该注解
package com.example.utils

@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@MustBeDocumented
annotation class AutoOpen

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/887181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例&#xff0c;异常数…

(12)MATLAB莱斯(Rician)衰落信道仿真2补充:莱斯衰落信道与莱斯随机变量

文章目录 前言1.关于莱斯衰落信道仿真的两个公式2.由式&#xff08;1&#xff09;推出式&#xff08;2&#xff09; 前言 本文给出关于莱斯衰落信道仿真的两个公式之间的推导。 1.关于莱斯衰落信道仿真的两个公式 在上一篇《&#xff08;11&#xff09;MATLAB莱斯&#xff08…

产品经理产出的原型设计 - 需求文档应该怎么制作?

需求文档&#xff0c;产品经理最终产出的文档&#xff0c;也是产品设计最终的表述形式。本次分享呢&#xff0c;就是介绍如何写好一份需求文档。 所有元件均可复用&#xff0c;可作为管理端原型设计模板&#xff0c;按照实际项目需求进行功能拓展。有需要的话可分享源文件。 …

Origin正态分布检验

在spass中用Shapiro-Wilk检验--正态分布检测 Shapiro-Wilk检验--正态分布检测_spss shapiro-wilk检验-CSDN博客

用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画

总得拆开炼丹炉看看是什么样的。这篇文章将带你从代码层面一步步实现 AI 文本生成图像&#xff08;Text-to-Image&#xff09;中的 LoRA 微调过程&#xff0c;你将&#xff1a; 了解 Trigger Words&#xff08;触发词&#xff09;到底是什么&#xff0c;以及它们如何影响生成结…

HTTPS协议简单介绍

HTTP协议简单介绍HTTP协议简单介绍-CSDN博客 目录 一、对称加密和非对称加密 对称加密 非对称加密 总结 二、HTTPS协议 定义 关键特点 工作原理 详细通信过程 1. 客户端请求连接 2. 服务器响应 3. 密钥交换 4. 加密通信 5. 关闭连接 ​编辑 优势 缺点 1. 性能…

leetcode35--搜索插入位置--二分查找刷题

搜索插入位置 一共会出现下面四种情况&#xff1a; 目标值在数组所有元素之前 目标值等于数组中某一个元素 目标值插入数组中的位置 目标值在数组所有元素之后 首先在二分查找的代码之前处理掉目标值在数组所有元素之前和之后的情况如果目标值在数组中的某个位置&#xff0c…

setTimeout,setInterval ,requestAnimationFrame定时器

setTimeout&#xff0c;setInterval &#xff0c;requestAnimationFrame定时器 定时器函数通常用于执行定时任务&#xff0c;也就是说你做了一个功能放在定时器函数里&#xff0c;它可以在特定的时间去执行你的指令&#xff0c;或者说隔多长时间&#xff08;单位时间内—毫秒为…

关于cefsharp访问iqiyi.com显示403 Forbidden解决办法(2种方法)

1.cefsharp浏览器访问iqiyi.com异常 (403 Forbidden) 403 Forbidden Q_DENY: Forbidden by iQIYI WAF! Any problem, contact iQIYI Security Group (security-help). Request ID: c0597b5aeead125907f7 2.解决办法(2种) 1)屏蔽掉 cefSettings.UserAgent2)修改 cefSettings…

酒店智能门锁SDK接口pro[V10] 门锁校验C#-SAAS本地化-未来之窗行业应用跨平台架构

一、代码 int 酒店标识_int Convert.ToInt32(酒店标识);StringBuilder 锁号2024 new StringBuilder(8);//信息 "未知返回值&#xff1a;" bufCard_原始;GetGuestLockNoByCardDataStr_原始(酒店标识_int, bufCard_原始.ToString(), 锁号2024);StringBuilder 退…

.NET Core 高性能并发编程

一、高性能大并发架构设计 .NET Core 是一个高性能、可扩展的开发框架&#xff0c;可以用于构建各种类型的应用程序&#xff0c;包括高性能大并发应用程序。为了设计和开发高性能大并发 .NET Core 应用程序&#xff0c;需要考虑以下几个方面&#xff1a; 1. 异步编程 异步编程…

开发环境简单介绍

目录 开发环境keil的安装和使用 keil的介绍 keil的安装 keil的简单使用 STC-ISP的安装 STC-ISP简单介绍 开发环境测试 总结 开发环境keil的安装和使用 keil的介绍 Keil uVision5是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于对嵌入式系统中的微控制器…

Windows 11 安装配置 Git 教程

目录 Git Windows 11 环境安装配置 Git Git Git是一个开源的分布式版本控制系统&#xff0c;由Linus Torvalds创建&#xff0c;用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行的版本控制系统&#xff0c;广泛应用于软件开发中。 以下是Git的一些关键特…

如何用深度神经网络预测潜在消费者

1. 模型架构 本项目采用的是DeepFM模型&#xff0c;其结构结合了FM&#xff08;因子分解机&#xff09;与深度神经网络&#xff08;DNN&#xff09;&#xff0c;实现了低阶与高阶特征交互的有效建模。模型分为以下几层&#xff1a; 1.1 FM部分&#xff08;因子分解机层&#…

深入探究:在双链表指定元素的后面进行插入操作的顺序

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;惟有主动付出&#xff0c;才有丰富的果…

Win10系统插入带有麦克风的耳机_麦克风不起作用_解决方法_亲测成功---Windows运维工作笔记054

今天我在使用讯飞输入法的时候,想通过讯飞的语音输入法来提高自己的输入效率。 但是这个时候发现一个问题就是我插入我的台式机的是一个带有麦克风的耳机。 但是发现我这个耳机没有办法被电脑识别出麦克风来,所以说就没办法使用讯飞输入法的语音输入功能来直接输入文字了。…

【重学 MySQL】五十六、位类型

【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中&#xff0c;位类型&#xff08;BIT类型&#xff09;是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值&#xff0c;其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon&#xff08;禹贡&#xff09;&#xff0c;基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力&#xff0c;提供专业的GIS&#xff08;Geographic Information System&#xff09;功能&#xff0c;赋能传统关系型数据库。 Yukon 支…

论文笔记(四十七)Diffusion Policy: Visuomotor Policy

Diffusion Policy: Visuomotor Policy 文章概括摘要1. 介绍2. 扩散策略的公式化2.1 去噪扩散概率模型2.2 DDPM 训练2.3 用于视觉运动策略学习的扩散模型 3 关键设计决策3.1 网络架构选项3.2 视觉编码器3.3 噪声计划3.4 加速实时控制的推理 4. 扩散策略的四个引人入胜的特性4.1 …

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于SABO-SVR减法平均算法优化…