![](https://img-blog.csdnimg.cn/3e35162d24b940a9bf3cf502d2ae80f6.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kotlin
对Kotlin实践的分享
WongKyunban
这个作者很懒,什么都没留下…
展开
-
Java类型与Kotlin类型对应关系
对有Java基础的小伙伴来说,掌握Kotlin的基本使用是很容易的。我们编程时,时刻都要与类型打交道,因此了解这两门语言的类型的对应关系,就可以在写Kotlin时借用很多Java的思考习惯。下面列出一些类型的对应关系:1.Java拆箱基本类型对应的Kotlin类型Java TypeKotlin Typebytekotlin.Byteshortkotlin.Shortintkotlin.Intlongkotlin.Longcharkotlin.Char原创 2020-12-30 15:40:17 · 3185 阅读 · 0 评论 -
Kotlin委托
Kotlin这语言有一个特点,它直接支持一些特别有用的设计模式在里面,如Kotlin的对象声明(单例),我们今天讲它的另外一种:委托。在委托设计模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。许多其他设计模式,如状态模式、策略模式、访问者模式实际上也采用了委托模式。委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin。举个例子:模拟打印机Printer拥有针式打印机RealPrinter的实例,Printer拥有的方法print()将处理转交给RealPr原创 2020-11-29 00:52:46 · 1825 阅读 · 0 评论 -
Kotlin使用is检查类型
is操作符检查表达式是否是某一个类型的实例。如果一个不可修改的本地变量或属性被检查特定类型,不需要显式地强制转换:fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj`自动转换为`String`在这个分支 return obj.length } // 在类型检查分支外的`obj` 的类型仍然是`Any` return null}或者以下这种:fun getStringLength(obj: Any): In原创 2020-08-09 23:11:33 · 3153 阅读 · 0 评论 -
Kotlin条件表达式与Elvis操作符?:
如果Kotlin的条件语句(if语句)中只是做赋值操作而已,那么IDE会提示:Return should be lifted out of 'if'其实就是建议你用条件表达式。如果下面这个方法:fun maxOf(a: Int, b: Int): Int { if (a > b) { return a } else { return b }}因为我们的条件语句中只是做赋值操作,因此建议写成这样: fun maxOf(a: Int, b: Int): Int {原创 2020-08-09 22:20:27 · 2060 阅读 · 0 评论 -
Kotlin通过委托模式实现接口
委托模式已经被证明是实现继承的一个很好的替代方案 :interface Base { fun print()}// 实现接口Baseclass BaseImpl(val x: Int) : Base { override fun print() { print(x) }}// 委托其他类来帮忙实现Base接口class Derived(b: Base) : Base by bfun main() { val b = BaseImpl(10) // 委托BaseImpl类为实现Ba原创 2020-08-07 08:31:59 · 1955 阅读 · 0 评论 -
Kotlin对象表达式与对象声明的区别
两者相似,但工作方式完全不一样:对象表达式会它们使用的地方马上执行对象声明则是懒加载的,也就是当第一次访问它时,它才会初始化伴生对象则是当类被加载时才被初始化的与Java的静态初始是一致的。...原创 2020-08-05 23:06:00 · 1875 阅读 · 0 评论 -
Kotlin伴生对象
Kotlin伴生对象的行为看起来就是Java的static的方法和属性。但它们本质区别还是很大的。什么是伴生对象呢?一个在类里面用companion关键字标记的对象声明,这个对象就是伴生对象。class MyClass { companion object Factory { fun create(): MyClass = MyClass() }}伴生对象的成员可以用类名直接调用,就像Java中用类名直接它的静态成员:val instance = MyClass.create()伴原创 2020-08-05 23:00:17 · 2009 阅读 · 0 评论 -
Kotlin用对象声明来实现单例模式
在Kotlin中, 定义单例将是一件十份简单的事。下面就是Kotlin下定义的单例:object DataProviderManager { fun registerDataProvider(provider: DataProvider) { // ... } val allDataProviders: Collection<DataProvider> get() = // ...}这叫对象声明,它通过有一个名称跟在关键字object,有点像变量声明。对象声明不是一个表达式原创 2020-08-05 22:37:05 · 1956 阅读 · 0 评论 -
Kotlin对象表达式
Java是没有这一说法的。Kotlin的对象表达式是用来创建匿名类的对象用的。interface MyInterface { fun bar();}class Box { fun foo(f:MyInterface){ f.bar() }}var d = Box()// 匿名内部类d.foo(object: MyInterface{ override fun bar() { print("Ha ha ha")原创 2020-08-05 22:29:01 · 2043 阅读 · 0 评论 -
Kotlin的嵌套类和内部类
Kotlin的嵌套类和内部类都是写在某个类里面,区别在于嵌套类不能访问外部类的成员,如果友嵌套类前加上关键字inner它就会成为一个内部类,这时它就可以访问外部类的成员了。嵌套类嵌套类不能访问外部类的成员!class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 }}val demo = Outer.Nested().foo() // == 2内部类加了关键字inner的嵌套类就是内部类,内部类可以访问外原创 2020-08-05 21:09:42 · 2701 阅读 · 0 评论 -
Kotlin与Java中的泛型问题
Kotlin可以在声明处或使用处解决泛型歧义声明处解决泛型歧义一、上界异常1.Java泛型类public class Box<T> {}以下赋值是错误的:错误!错误!错误!编译器会报类型不匹配的错误。Box<Object> box1 = new Box<Object>();Box<String> box2 = new Box<String>();box1 = box2;解决办法,指定上界:// 只接受Object或其子类原创 2020-08-04 21:53:36 · 2733 阅读 · 0 评论 -
Kotlin密封类
Kotlin密封类密封类被用于展示受限的类层次结构。当一个值可以有一个来自一个有限集合中的类型,但不能有任何其他类型。在某种程度上来说,它们是枚举类的扩展,一个枚举类型的值的集合也是受限的。但每一个枚举常量只作为一个单例存在,而密封类的子类可以有多个实例,这些实例都可以包含状态。定义一个密封类,你只需将sealed修饰符放在类名之前。一个密封类可以有多个子类,但它们必须和密封类定义在同一个文件中。sealed class Exprdata class Const(val number: Double原创 2020-07-30 10:23:18 · 4478 阅读 · 0 评论 -
Kotlin数据类
我们经常创建类,主要目的是为了持有数据。在这样的类中,标准的功能和工具函数从数据中机械推导出来的。这样的类在Kotlin中叫做数据类(data class),用data标记:data class User(val name: String, val age: Int)编译器会自动从在主构造函数中声明的属性推导出以下这些成员来:equals()/hashCode()toString()componentN()函数对应属性声明的顺序copy()为了保存一致性和生成的代码的有意义行为,data原创 2020-07-29 22:47:33 · 2741 阅读 · 0 评论 -
KotLin扩展
Kotlin扩展Kotlin提供了用一个新的函数来扩展一个类的能力,而不需要继承这个类或用设计模式如装饰者来实现。有了这个能力,我们就可以轻松为那些我们不能改变的第三方包中的类添加功能。为类添加了的函数,可以像类的其他函数一样调用。除了扩展函数外,还可以扩展属性,让你为已存在的类定义新属性。这个Kotlin机制叫扩展函数。扩展函数声明一个扩展函数,我们需要在它的名字前加上接收器类型(即类名),即被扩展的类型。// 定义一个类class D{...}// 为D类添加一个扩展函数private f原创 2020-07-29 11:28:04 · 1838 阅读 · 0 评论 -
Kotlin可见性修饰符
可见性修饰符Kotlin有private,protected,internal,public四个修饰符。Kotlin的类、对象、接口、构造函数、函数、属性和它的getters和setters都可以用这些修饰符修饰。如果没有明确指定修饰符,那么它默认就是public。包函数、属性、类、对象、接口都可以定义在顶层,即直接定义在包里。// file name :demo.ktfun baz() { ... } // 顶层函数class Bar { ... } // 顶层类如果你没有指定任何可见性原创 2020-07-28 15:23:02 · 2111 阅读 · 0 评论 -
Kotlin接口
1.概述Kotlin接口即可以有抽象方法,也可以有实现了的方法。接口与抽象类的区别在于接口不能存在状态。接口还可以有属性,不过这些属性只能是抽象的,或者提供访问器的实现。Kotlin的接口与Java的类似,也是可以多继承的。接下来我们来看年Kotlin如何定义接口,以及多继承情况下如何解决冲突和Kotlin中的属性有何特别。2.定义Kotlin接口与Java接口定义一样也是用interface 关键字定义。接口中的方法可以是抽象或已实现了的,如:interface MyInterface{ fu原创 2020-07-28 00:26:38 · 2194 阅读 · 0 评论 -
Kotlin属性与字段
Kotlin属性与字段1、声明属性2、Getters和Setters方法3、返回字段4、返回属性1、声明属性Kotlin类中的属性可以使用var关键字声明为可变的,或者使用val关键字声明为只读的。class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: Str原创 2020-07-18 14:47:23 · 1955 阅读 · 0 评论 -
Kotlin类与继承、抽象类、嵌套类、内部类、匿名内部类、伴生对象、对象声明、对象表达式
Kotlin类与继承Kotlin与Java都使用class关键字来定义类。Java是纯面向对象的编程语言,类一般都包含成员变量、成员方法。Kotlin的类也包含成员变量、成员方法。唯一不同的是,Kotlin的表现形式更多些,更为灵活。(有时候,灵活也不是一件好事。)1、类Java:class MyClass{} // 简单的类Kotlin:Kotlin的类的声明包括类名、类头部(指定类型参数和主构造函数)、类体。类头部和类体都是可选的,如果没有类体的类,花括号可以省略。一般的类定义:cla原创 2020-07-16 22:31:33 · 2012 阅读 · 0 评论 -
Java与Kotlin互调
Java与Kotlin互相调用KotlinTesxtMe.kt文件:object KotlinTesxtMe { val sum = {x: Int, y: Int -> x + y}// lamda表达式}class MyKotlinClass{ fun hello(){ // 在Kotlin中调用Java val s = Main...原创 2019-07-11 16:41:59 · 2158 阅读 · 0 评论 -
Java与Kotlin在语法上的差异
1、源文件后缀名Java:.javaKotlin:.kt2、继承Java:父类:class Base{}子类:class SubClass extends BaseKotlin:父类:open class Base(b:Int)子类:class SubClass(b:Int) : Base(b)3、变量var <propertyName>[: <Proper...原创 2019-05-09 08:40:33 · 2591 阅读 · 0 评论