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

聊聊Kotlin元编程

描述“数据”“数据” 我们知道我们需求也就是程序是通过各种数据构建起来,这些数据就是指类,函数,变量....等是对现实世界和需求描述,这就是第一个数据意思 通过类,变量,函数这些数据去描述需求程序...通过元数据描述类,变量,函数信息 什么是元编程 直接说定义:操作元数据编程就是指元编程。 比如我们通过反射获取类,属性,方法一些信息,进而操作他们这也叫元编程。...javaMethod还分为构造函数和普通函数,且是单独setget方法不是Field自带 Java反射需要设置可访问性,Kotlin属性自带setget方法通过get可直接获取。...Kotlin增强 和java反射一样使用,不同Kotlin由于多了很多特性所以其元数据类型也比java多,比如: metaclass描述类型kclass。...比如使用字节码工具ASM,javassist等动态生成类,还有使用KAPT注解处理器通过注解手动输出程序到一个文件

77840

Java 反射 VS Kotlin 反射

// 类声明所有构造函数。 public val constructors: Collection> Kotlin 通过::操作符并添加类引用构造函数。... KFunctionN invoke()方法形参类型和返回值类型是可以确定,调用它 invoke() 时编译器会帮我们做检查。 当然,也可以使用 KFunctionN 引用类扩展函数。...0 x var y: kotlin.String world y 扩展属性引用 Kotlin 使用::属性获取扩展属性引用,并返回 KProperty1 类型值。...Kotlin 使用::属性获取成员属性引用,并返回 KProperty1 类型值。...() Java 获取类其它描述信息,包括: // 获取类 public String getSimpleName() // 获取完整类 public String getName() // 判断类是不是枚举类

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

31 天,从浅到深轻松学习 Kotlin

这只是替换空作为值或者返回事件情况一个小语法。 Day 3:String 模板 格式化字符串?将$放在变量前面去表达字符串变量和表达式。使用 ${expression} 求表达式值。...Day 6:属性Kotlin ,类可以具有可变和只读属性,默认情况下生成 getter 和 setter。如果需要,您也可以实现自定义。...Day 24:具体化 具体化概念例子:Android KTX Context.systemService() 使用泛化通过泛型传递 “真实” 类型。...序列是迭代器表亲,一次只能懒散地产生一个值。这在使用 map 和 fifter 时非常重要 - 它们将创建序列,不是为每一步都复制列表! 您可以从列表创建序列或指定下一个功能。...如果您永远不会终止一个序列,它可以是无限长不会耗尽内存。使用 Kotlin 协程您也可以使用生成器!

2.2K30

Kotlin实战【二】Kotlin基本要素

但是在Kotlin,许多变量类型都可以省略,所以在Kotlin以关键字开始,然后是变量,最后加上类型(也可以不加)。...和其他脚本语言一样,Kotlin允许在字符串字面量,通过$字符放在变量前面,引用本地变量。这个同Java字符串连接("Hello, " + name + "!")...如果你想在字符串包含$符号,用println("\$x")换码,打印出$x,不是把x翻译为一个变量引用。...name: String, //只读属性:自动生成一个域和简单getter var isMarried: Boolean //可写属性:一个域,getter和setter ) 接下来我们看下如何使用上面定义好...>**小贴士:** > - 你可以在Java定义类中使用Kotlin属性语法。在Java类getter可以在Kotlinval属性获取,getter/setter可以通过var属性获取。

1.1K20

Kotlin委托

Kotlin中有委托,这个C#也有,不过对于学Java童鞋来说,这是什么鬼啊,到底是干什么用… 在委托模式,当有两个对象参与处理同一个请求是,接受请求对象将请求委托给另一个对象来处理。...两函数都需要用 operator 关键字进行标记。 翻译规则 在每个委托属性实现背后,Kotlin 编译器都会生成辅助属性并委托给它。...var positiveNumber = Delegates.vetoable(0) { d, old, new -> new >= 0 } NotNull 委托 他会含有一个可空变量并会在我们设置这个属性时候分配一个真实值...这经常出现在像解析 JSON 或者做其他“动态”事情应用。 在这种情况下,你可以使用映射实例自身作为委托实现委托属性。 class User(val map: Map<String, Any?...下面总结一下委托使用场景: 有多个类或属性重复使用同一段代码。

1.4K30

Kotlin 基础 | 委托及其应用

() } } 这里关键词by出现在属性后面,表示属性委托,即将属性读和写委托给另一个对象,被委托对象必须满足一定条件: 对于 val 修饰只读变量进行属性委托时,被委托对象必须实现getValue...()接口,即定义如何获取变量值。...对于 var 修饰读写变量进行属性委托时,被委托对象必须实现getValue()和setValue()接口,即定义如何读写变量值。...类会被存储到一个支持属性delegate,委托属性设置和取值方法实现全权委托给代理类。...属性名将自动作用于 map 键。 总结 Kotlin 委托分为类委托和属性委托。它们都通过关键词by进行委托。 类委托可以用简洁语法将类实现委托给另一个对象,以减少模板代码。

94330

Kotlin入门(15)独门秘笈之特殊类

Java嵌套类允许访问外部类成员,Kotlin嵌套类不允许访问外部类成员。..." } } } 调用嵌套类时,得在嵌套类前面添加外部类,相当于把这个嵌套类作为外部类静态对象使用。...所以,Kotlin内部类就相当于Java嵌套类,Kotlin嵌套类则是加了访问限制内部类。...枚举变量本质上还是该类一个实例,所以如果枚举类存在构造函数的话,枚举变量也必须调用对应构造函数。这样做好处是,每个枚举值不但携带唯一名称,还可以拥有更加个性化特征描述。...这个问题在Java是通过模板类(也叫做泛型类)解决,例如常见容器类ArrayList、HashMap均是模板类,Android开发异步任务AsyncTask也是模板类。

1.3K30

【Android进阶】kotlin 委托

Kotlin 通过关键字 by 实现委托。 类委托 类委托即一个类定义方法实际是调用另一个类对象方法实现。...Example@433c675d p 属性赋值为 Runoob Example@433c675d, 这里委托了 p 属性 标准委托 Kotlin 标准库已经内置了很多工厂方法实现属性委托。...这经常出现在像解析 JSON 或者做其他"动态"事情应用。 在这种情况下,你可以使用映射实例自身作为委托实现委托属性。 class Site(val map: Map<String, Any?...provideDelegate 一个可能使用场景是在创建属性时(不仅在其 getter 或 setter )检查属性一致性。...如果没有这种拦截属性与其委托之间绑定能力,为了实现相同功能, 你必须显式传递属性,这不是很方便: // 检查属性名称使用“provideDelegate”功能 class MyUI {

50520

Kotlin学习笔记

) joinToString(list) joinToString(list, prefix = "# ") 1.7 顶级函数和属性(静态) 在 Java 我们需要把函数和属性放在一个类,在 Kotlin...我们可以把某个函数或属性直接放到某个 Kotlin 文件,把这样函数或属性称之为 顶级函数或属性。...//相当于 import strings.JoinKt.* import strings.* 3)、顶级属性 同样也是 static 静态 如果使用 var 定义会生成对应静态setter...、getter函数 如果使用 val 定义只会生成对应静态getter函数 4)、Kotlin文件被修改怎么办?...如果所在Kotlin文件被修改,编译生成也会被修改,可以通过注解方式固定编译生成: @file:JvmName("StringFunctions") package stringsfun

1.8K30

Kotlin基础之委托

委托属性 属性委托指的是一个类某个属性不是在类中直接进行定义,而是将其托付给一个代理类,从而实现对该类属性统一管理。...Map存储属性值,在应用很常见,如解析JSON或其他动态事。...编译器在参数中提供了关于 prop 所有必要信息:第一个参数 this 引用到外部类 C 实例 this::prop 是 KProperty 类型反射对象,该对象描述 prop 自身。...provideDelegate 一个可能使用场景是在创建属性时(不仅在其 getter 或 setter )检查属性一致性。...如果没有这种拦截属性与其委托之间绑定能力,为了实现相同功能, 你必须显式传递属性,这不是很方便: // 检查属性名称使用“provideDelegate”功能 class MyUI {

79060

《Kotin 极简教程》第7章 面向对象编程(OOP)(1)第7章 面向对象编程(OOP)《Kotlin极简教程》正式上架:

二进制实质是通过两个数字“0”和“1”描述事件。在人类生产、生活等许多领域,我们可以通过计算机虚拟地描述现实存在事件,并能通过给定条件和参数模拟事件变化规律。...另一种对对象描述为:对象具有状态(数据,成员变量)、行为(操作,成员方法)和标识(成员,内存地址)。 面向对象语言其实是对现实生活实物抽象。...万事万物都是对象,对象有其行为(方法),状态(成员变量,属性)。OOP是一种编程思想,不是针对某个语言而言。当然,语言影响思维方式,思维依赖语言表达,这也是辩证来看。...Kotlin类和接口跟Java对应概念有些不同,比如接口可以包含属性声明;Kotlin类声明,默认是final和public。 另外,嵌套类并不是默认在内部。...如果要在子类访问父类同名成员变量,需要使用super关键字进行引用。

1.1K20

最强总结 | 带你快速搞定kotlin开发(上篇)

1.2 变量: var age:Int = 18 val name:String = "Kotlin" val person = Person() 使用var声明可读可写变量使用val声明只读变量...val可以理解为Java属性声明加上了final关键字(将kotlin字节码反编译成Java一看就知道了),其实kotlin是更倾向于推荐使用val声明变量,这是一种防御性编码思维模式,目的是减少程序出错或者变更加安全...在Java中使用+Kt后缀直接访问 PersonKt.getSomething(); // 在kotlin文件调用更加方便,只需要导包,不需要加类 // 但是这种方式并不有利于阅读,会和类函数搞混淆...() // java调用 Person.INSTANCE.getSomething(); 其实使用object创建类时候,默认会生成一个单例对象,当我们使用直接调用时候,其实是通过默认单例对象进行调用...那得问当初设计kotlin语言的人了,从面向对象角度来说,这么设计的确更符合万物皆对象理念,因为static只跟类有关,不是和对象有关。

52710

第12章 元编程与注解、反射第12章 元编程与注解、反射

注解是把编程元数据信息直接写在源代码不是保存在外部文件。 在使用注解之前(甚至在使用之后),XML配置文件被广泛应用于编程过程元数据描述。...后来程序员们逐渐发现XML维护越来越糟糕了,进而希望直接使用一些和代码紧耦合“元数据”,不是像 XML 那样和代码分离。...它们是:类 CLASS, 注解类 ANNOTATION_CLASS,泛型参数 TYPE_PARAMETER,函数 FUNCTION, 属性 PROPERTY, 用于描述域成员变量 FIELD,局部变量...Kotlin可以直接使用扩展属性 declaredFunctions 获取这个类声明所有函数(对应反射数据类型是 KFunction )。...Kotlin函数和属性也是头等公民,我们可以通过反射来内省属性和函数:如运行时属性或类型,函数名或类型等。 在Kotlin我们有两种方式实现反射功能。

97620

Kotlin Android】一个列表带你领略Kotlin简洁之风

变量和常量声明 Kotlin使用 var 和 val 关键字作为变量和常量声明,有以下几种声明方式: var 变量: 变量类型 = 类() 或 var 变量: 类()...Kotlin 类声明、定义、继承 Kotlin同样使用class声明类,类继承符号为一个冒号“:”,基类需要在类后面带上一对括号,如果基类构造函数带有参数,此时需要在括号填写对应参数。...constructor,而非像Java用是类 Kotlin 函数定义 Kotlin函数方法使用关键字 fun 声明,关键字 override 表示该函数重写了父类方法,参数声明使用[参数: 参数类型...Kotlin基本使用 新建支持KotlinAndroid工程 如果你Android Studio还不是3.0,那么需要下载Kotlin插件和做一些相关配置,请自行百度。...接下来就可以愉快使用Kotlin玩耍啦,此处我们以一个列表页面演示。 1. 首先,在activity_main.xml,我们添加一个列表,id命名为listView: <?

1.8K10

第4章 类与面向对象编程第4章 类与面向对象编程

在ALGOL60采用了以 Begin - End 为标识程序块,使块内变量是局部,以避免它们与程序块外同名变量相冲突。在编程语言中首次提供了封装(保护)机制。...另一种对对象描述为:对象具有状态(数据,成员变量)、行为(操作,成员方法)和标识(成员,内存地址)。 面向对象语言其实是对现实生活实物抽象。...当子类继承了某个类之后,便可以使用父类成员变量,但是并不是完全继承父类所有成员变量。...如果要在子类访问父类同名成员变量,需要使用super关键字进行引用。 4.3.2 接口 接口是一种比抽象类更加抽象“类”。接口本身代表是一种“类型”概念。...下一章,我们一起学习Kotlin函数式编程。

1.7K20

Kotlin反射机制深入讲解

//1.获取类 public String getSimpleName() //2.获取完整类 public String getName() //3.判断类是不是枚举类 public...Kotlin可以使用Java反射,但是由于Kotlin字节码.class对应是KClass类,所以如果想要使用Java反射,需要首先获取Class实例,在Kotlin可以通过以下两种方式获取...当然Kotlin除了可以使用Java反射以外,还可以使用Kotlin声明一些方法,当然同Java反射一样,想要使用这些方法,先要获取Kclass对象,在Kotlin可以通过以下两种方式获取...使用Kotin反射注意问题 在Kotlin1.1如果反射String,Map,List等类型时,会抛出一个built-in Kotlin Types异常,这是因为在Kotlin1.1版本还没有对这些类型添加支持...最后就是关于Kotlin反射效率问题,在Java反射大概需要几十微秒,在Kotlin就需要几百甚至上千微秒,如果是通过反射访问对象或构造属性,甚至需要上万微秒,对此,官方给出解释是,现在还没有精力进行优化

1.7K20

转向Kotlin——类和接口

当然Java可以直接使用public成员变量解决这个问题,但对于属性来说,不仅仅能读写其值,还需要对其进行二次加工,所以get/set也是必须。...Kotlin属性语法,只有var/val和属性时必须,其他都是可选。也就是说,Kotlin属性最简单形式就是在类定义一个变量(var)或常量(val),要引用属性,就像引用变量一样。...Kotlin可以使用filed标识符当作成员变量使用,也就是通过filed读写属性值: class Class { var name: String = "js" get(...类继承 1、如何继承 与Java不同,Kotlin继承需要使用冒号(:),Java使用extends。注意,冒号后面需要调用父类构造器。...:实现接口与继承父类类似,使用冒号(:),但后面不是调用构造方法,而是是指跟接口Kotlin接口方法,允许包含默认方法体,对于这样额方法,子类实现接口时不一定必须实现该方法。

90030
领券