互操作性和可空性 要注意Java中所有类型都是可空的 String!...字段值 fun main() { val result = JavaTest() println(result.generateNullString()) //对应的Java类中属性要实现...get和set方法 println(result.points) } @JvmName 用来注解指定编译类的名字,方便Java调用 //System.out.printf(HeroKt.sayHello...这样用户就指定怎么正确处理任何异常了 kotlin中抛出的异常会被转换成Throwable,Java中会catch不了。...在Java里,kotlin函数类型使用FuctionN这样的名字的接口来表示,N代表值参的数目,这样的Function接口由23个,每一个都包含一个invoke函数,专门用于调用函数类型函数 class
Kotlin编译器对来自Java的空值name(平台类型)放宽了空检查name.substring(1)。但是这样的空指针异常仍然会在运行时抛出来。...: 表示 “可以可变或不可变、可空或不可空的 T 的 Java 集合” Arrayout) T>!...,SAM 转换只适用于接口,而不适用于抽象类,即使这些抽象类也只有一个抽象方法。...("Kotlin") 其实,Kotlin中的println函数是一个内联函数,它其实就是通过封装java.lang.System类的System.out.println来实现的。...数据类 这段Kotlin中的数据类的代码: data class Developer(val name: String, val age: Int) 对应下面这段Java实体类的代码: Java public
在上篇笔记中,我们对 Kotlin 的基本类型、关键字、类与对象,以及与 Java 之间互调的内容有了一些认识,这篇笔记来看看 Kotlin 中几种特殊的类,以及集合相关的常用操作。 1....这两个 component 是 data class 自动生成的,如果普通的 class 也想这样解构,也可以,需要使用 operator 关键字,对类中的属性做一个关联: // code 4 class...Kotlin 枚举类(密闭类) Kotlin 中也有枚举类,使用方法与 Java 的枚举类一样,此外,Kotlin 还有一个更加强大的枚举类,称为密闭类,用 sealed 关键字修饰。...密闭类可以有自己的子类,而且可以扩展它的子类,例如给子类设置一些参数等,要知道,枚举类是不具有这种特点的: // code 6 // Kotlin 密闭类(高级枚举类) sealed class Language...array 可修改元素值,修改后为 [99,2,3,4,5] 与 code 9 中的 List 不一样的是,Array 的这种初始化后的 array 对象,是可以对数组中的元素做修改的,但是其他的
安全:Java最大的一个问题就是null。如果没有对变量或是参数进行null判断,那么程序当中就有可能抛出大量的NullPointerException,然而在编码时这些又是难以检测到的。...Kotlin使用了显式的null,这会强制我们在必要时进行null检查。 互操作:Kotlin可与Java语言无缝通信。...相同,注意需要将compile修改为provided,防止类库重复引用。...解决方法:在主站代码中配置属性方法混淆,保证kotlin类中属性方法全部不做混淆优化; 为了保证插件包大小,并且与主站代码不重复,引用类库时使用provided; 解决方法:使用provided引入类库...,在编译时使用,最终不会被编译到apk;后期将配置环境放到aura中更方便。
, PACKAGE, PRIVATE 2.3 @NonNull 顾名思义,@NonNull 用于标记类中不能允许为 null 的字段或者参数上,任何使用该字段的地方都生成空指针判断代码,若@NonNull...使用属性 @ToString.Exclude排除不需要在 toString 中出现的字段,使用 @ToString.Include标记需要出现在 toString 中的字段,具体用法可参见示例: @Getter...(1).name("父类名称").childName("子类名称").build(); System.out.println(child.getId()); 由于 Lombok Plugin 还未更新支持...throws 关键字的情况下,隐蔽地抛出受检查异常,为我们平常开发中需要异常抛出时省去的 throw 操作,下面为使用 @SneakyThrows 的示例代码: public class SneakyThrowsExample...而 val 与 var 的区别在于, val 用于修饰不可变变量,var 修饰可变变量。当 val 修饰的变量被重新赋值时,编译器就会提示异常:Error: java: 无法为最终变量 X 分配值。
前言 -- 从kotlin1.1开始,协程就被添加到kotlin中作为实验性功能,直到kotlin1.3,协程在kotlin中的api已经基本稳定下来了,现在kotlin已经发布到了1.4,为协程添加了更多的功能并进一步完善了它...,不同的是DefaultScheduler内部依赖的是kotlin自己实现的线程池逻辑,而CommonPool内部依赖的是java类库中的Executor,默认情况下useCoroutinesScheduler...Work Stealing)重新实现了一套线程池的任务调度逻辑,它的性能、扩展性对协程的任务调度更友好,具体的逻辑可以查看这个类的dispatch方法: internal class CoroutineScheduler...,后续异常都放在了第一个抛出异常的suppressed数组中。...puls方法最终返回的CoroutineContext是不存在key相同的element的,+号右边的CoroutineContext中的元素会覆盖+号左边的CoroutineContext中的含有相同
什么是Java中的异常层次结构? 层次结构如下: Throwable是所有Exception类的父类。...Java异常类的重要方法有哪些? 异常及其所有子类均未提供任何特定方法,并且所有方法均在基类Throwable中定义。...String getLocalizedMessage()–提供此方法,以便子类可以重写它以向调用程序提供特定于语言环境的消息。此方法的可抛出类实现仅使用getMessage()方法即可返回异常消息。...String toString() –此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类的名称和本地化消息。...返回的字符串包含Throwable类的名称和本地化消息。 void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流。 Q14。
什么是Java中的异常层次结构? 层次结构如下: Throwable是所有Exception类的父类。...Java异常类的重要方法有哪些? 异常及其所有子类均未提供任何特定方法,并且所有方法均在基类Throwable中定义。...此方法的可抛出类实现仅使用getMessage()方法即可返回异常消息。...String toString() –此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类的名称和本地化消息。...返回的字符串包含Throwable类的名称和本地化消息。 void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流。 Q14。
中可以不必向上抛出异常(java中必须抛出,不然编译不过) fun readNumber(reader: BufferedReader): Int?...) joinToString(list) joinToString(list, prefix = "# ") 1.7 顶级函数和属性(静态的) 在 Java 中我们需要把函数和属性放在一个类中,在 Kotlin...因为 JVM 虚拟机只能执行类中的代码,所以 Kotlin 会生成一个名叫 JoinKt 的类,并且顶级函数是静态的,所以可以在 Java 中这样调用顶级函数: JoinKt.joinToString(...可访问级别‘’ 有区别:只有子类可访问 1.12 声明类的几种方式 class className : 这个类是 public final 的 class Person 编译后: public final...内部类 在 Kotlin 中内部类默认是静态的( Java 与此相反),不持有外部类的引用: class OuterClass { //在 Kotlin 中内部类默认是静态的,不持有外部类的引用
这适用于在异常链(异常嵌套)机制被加入到 Throwable 之前存在“遗留 Throwable 链机制”的情况。...5:ClassCastException(类转换异常) 这个问题会经常遇到,对象的转换的时候经常会出现这个问题 当试图将对象强制转换为不是实例的子类时,抛出该异常。...数据结构上的栈,如果你的栈是空的,那么在java中,如果你取出元素的话,比如一个peek(),它不会给你输出null,会给你抛出栈空异常 该异常由 Stack 类中的方法抛出,以表明堆栈为空 8:...SyncResolver 对象中的所有其他值将为 null。 SyncResolver 对象可用于检查并解析一个行中的每个冲突,然后转到下一个有冲突的行,重复该过程。...(ex.age); System.out.println(ex01.name); } } 但是运行时会出现问题。
在Kotlin中,有很多很酷很实用的特性,比如Lambda和高阶函数,利用这些特性,我们可以更加快速的实现开发,提升效率。...System.out.println("testNormalSafeRun") } } 由于Kotlin默认是面向JDK 6,而Java 8 才引入Lambda表达式支持,Kotlin...Lambda 表达式 翻译成的Function0 的实例被创建了近101多次,生成101个Fuction0 实例 由于Lambda 表达式捕获了外部的变量,生成的Fuction0类 接受变量作为参数 上述代码存在的性能问题...inline 好在Kotlin提供了,处理上面问题的方法,这就是所谓的inline 关键字。...通过这种形式,避免了最一开始的类实例生成的问题了。 When Lambada meets return 自从了解了 Lambda 可以被inline后,我们貌似可以自由自在地使用它。
没关系,直接看代码 @Parser(name = "Response") open class ResponseParser : TypeParser { //以下两个构造方法是必须的...= 200或data == null时,就抛出ParseException异常,并带上了msg、code字段,所以我们在异常回调通过强转,就可以拿到这两个字段 接着回答第二个问题,异常回调里的it是什么对象...,截取范围越界,则抛出越界异常;take用于从0开始,取n个数据,不足n个时,返回全部,如下: val students = RxHttp.postForm("/service/...") .toList...,这是典型的串行场景 看看通过协程如何解决这个问题,如下: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState...)中的任一版本(v4.3.0除外,该版本有一个bug,导致无法适配),因此,使用RxHttp,完全不用担心okhttp版本冲突问题。
# Kotlin 的类型系统 ## 类、类型和子类型 - 类(class)是指一种数据类型,类定义定义对象的属性和方法,可以用来创建对象实例,例如 `class Person(val name: String...; 可空类型的strNullable:String? 不可以赋值给 非可空类型的 strNotNull:String。 可以看出每一个Kotlin**类**都可以用于构造至少两种**类型**。...所以表达式思维中的问题就可以解答了 ``` // 函数返回值类型是Int,实际上却抛出了异常,没有返回Int // ↓ ↓ fun calculate...类型 println(name.length) // 可能抛出空指针异常 person.name = null // 允许赋值为 null } ``` 在这个例子中, name 是平台类型...length) // 非空断言,如果 name 为 null 则抛出异常 ``` 平台类型是指 Kotlin 和 Java 的互操作性问题, 在混合项目中要多加注意。
简介JDK 8 中 CompletableFuture 没有超时中断任务的能力。现有做法强依赖任务自身的超时实现。本文提出一种异步超时实现方案,解决上述问题。...在我们的日常优化中,最常用手段便是多线程并行执行。这时候就会涉及到 CompletableFuture 的使用。常见使用方式下面举例一个常见场景。...那么就存在一个问题,中间件超时控制能力有限,如果异步任务是中间件 IO 操作 + 本地计算操作怎么办?...而获取结果(反序列化)作为纯本地计算操作,耗时长短受 CPU 影响较大。某些 CPU 使用率高的情况下,就会出现异步任务没能触发抛出异常中断,导致我们无法准确控制超时时间。...解决方式JDK 9这类问题非常常见,如大促场景,服务器 CPU 瞬间升高就会出现以上问题。那么如何解决呢?其实 JDK 的开发大佬们早有研究。
()) 因为调用接口方法的时候最终运行的还是其实现类的方法,所以上面两种描述方式都是可以的。 ...匹配 com 包下的任意包中的 UserService 类或接口中所有名称为 findById 的方法 +:专用于匹配子类类型 execution(* *..*Service+.*(..))...我们先来一个个分析下: 获取切入点方法的参数,所有的通知类型都可以获取参数 JoinPoint:适用于前置、后置、返回后、抛出异常后通知 ProceedingJoinPoint:适用于环绕通知...(BookDao.class); String name = bookDao.findName(100,"itheima"); System.out.println(name...); } } 说明: 使用 JoinPoint 的方式获取参数适用于前置、后置、返回后、抛出异常后 通知。
> leafClass) 用于获取指定类及其所有父类中声明的所有方法。 Class leafClass) 用于获取指定类及其所有父类中声明的所有唯一方法。 ClassClass clazz, String name) 用于在给定的类及其父类中查找指定名称的字段。 ClassClass type) 用于在给定的类及其父类中查找指定名称、类型的字段。...> clazz, FieldCallback fc) 用于对指定类的本地字段(即不包括父类的字段)进行操作。 Class<?
二、 异常的结构 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。...Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。...返回异常对象的本地化信息。使用Throwable的子类覆盖这个方法,可以声称本地化信息。...问2: 为什么抛出的异常一定是可检查异常(除了Exception中的RuntimeException及其子类以外,其他的Exception类及其子类)?...三、小结 1: try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。 2: catch 块:用于处理try捕获到的异常。
核心概念 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等 在SpringAOP中,理解为方法的执行 切入点(Pointcut):匹配连接点的式子 在SpringAOP...开头的方法、所有以Dao结尾的接口中的任意方法、所有带有一个参数的方法等 通知(Advice):在切入点处执行的操作,也就是共性功能 在SpringAOP中,功能最终以方法的形式呈现 通知类:定义通知的类...匹配com包下的任意包中的UserService类或接口中所有名称为findByld的方法 + :专用于匹配子类类型 execution(* *.....void,也可以设置成Object 由于无法预知原始方法运行后是否会抛出异常,因此环绕通知方法必须抛出Throwable对象 环绕通知中可以对原始方法调用过程中出现的异常进行处理 返回后通知(了解) 名称...获取原始参数 获取切入点方法的参数 JoinPoint:适用于前置、后置、返回后、抛出异常后通知 Proceed]ointPoint:适用于环绕通知 示例: @Pointcut("execution(*
弃用:枚举项中的嵌套类型 在枚举项中,由于初始化逻辑中的问题,定义一个不是内部类的嵌套类型的功能已经被弃用。在 Kotlin 1.2 中这将会引起警告,并将在 Kotlin 1.3 中报错。...弃用:扩展 Throwable 的泛型类的内部类 继承自 Throwable 的泛型的内部类可能会违反 throw-catch 场景中的类型安全性,因此已被弃用,在 Kotlin 1.2 中会被警告,在...Regex 类现在是可序列化的 kotlin.text.Regex 类已成为可序列化的类,现在可以在可序列化的层次结构中使用。...如果满足条件,Closeable.use 可以调用 Throwable.addSuppressed 在一些其他异常处理后,关闭资源期间抛出异常时,Closeable.use 函数可调用 Throwable.addSuppressed...这可以改变类加载和初始化的顺序 preserve-class-initialization —— 为构造函数调用生成类 Java 字节码,以确保保持类初始化顺序。
领取专属 10元无门槛券
手把手带您无忧上云