Kotlin 开发Android :基本语法
来源:互联网 发布:c语言函数查询工具 编辑:程序博客网 时间:2024/05/16 23:34
变量
1.常量
val text:String = "hell world!";
2.变量
var view:View = LayoutInflater.from(this).inflate(R.layout.dialog_kotlin,null, false);
3.可为空的变量
var message:String? = "this is a dialog message!";
4.可以不指定类型
var name: String? = null;var testName = "test"
5.静态变量
companion object { var sText = "companion text";}
函数
1.定义函数(或方法)
fun onClickTest(view: View) {}
2.定义带返回值的函数
fun onClickTest(view: View) :String { return "";}
3.定义返回值可为空的函数
fun onClickTest(view: View) :String? { return null;}
类
Kotlin类文件名为*.kt,一个类可以有(0或1)个主构造函数或多个次构造函数
主构造函数:
i.可以将主构造函数中参数申明成类中成员变量
open class Animal(var nameStr: String) { open fun test(){ val testName = nameStr; } }
ii.可以不作为成员变量
open class Food(name: String){ lateinit var mName:String; init { mName = name; } }
次构造函数:
i.不能将次构造函数中参数申明成成员变量
如 以下是错误的
ii.如果有主构造函数,次构造函数必须要实现主构造函数,对象构造后会调用init 代码块
open class Food(name: String){ lateinit var mName:String; init { mName = name; } constructor(nameStr: String, weight: Int) : this(nameStr) { } }
iii.子类的要实现父类的主构造函数
open class Animal(var nameStr: String) { open fun test(){ val testName = nameStr; } } class Duck : Animal("鸭子") { override fun toString(): String { return "name:"+nameStr; } } class Dog(var name: String) : Animal(nameStr = name) { override fun test(){ val testName = nameStr; this.name =""; } } class Pig(name: String, weight: Int) : Animal(nameStr = name) { }
内部类
Kotlin中内部类都是静态的,如以下内部类Food无法调用外部成员变量parentVar
class KotlinActivity : AppCompatActivity() { var parentVar:String = "parent var"; open class Food(name: String){ lateinit var mName:String; init { mName = name; mName = parentVar; mName = KotlinActivity().parentVar; } constructor(nameStr: String, weight: Int) : this(nameStr) { } }}
非静态内部类,需要用inner标示,如下:
class GameActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_game) start.setOnClickListener { gameView.start() } } fun onScoreChanged(scoreValue: Int) { score.text = scoreValue.toString() } override fun onPause() { super.onPause() } inner class Test{ fun init(){ var context = this@GameActivity.applicationContext; } }}
接口
package com.ifnoif.game2048import android.app.Activityimport android.os.Bundleimport kotlinx.android.synthetic.main.activity_game.*import java.io.Fileimport java.io.FileFilter/** * Created by shen on 17/4/11. */class GameActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_game) start.setOnClickListener { gameView.start() } } fun onScoreChanged(scoreValue: Int) { score.text = scoreValue.toString() } override fun onPause() { super.onPause() } inner class Test{ fun init(){ var context = this@GameActivity.applicationContext; var fileFilter: FileFilter = FileFilter { pathname: File -> var end = ".java"; pathname.absolutePath.endsWith(end) } //实现kotlin中的接口,不能整成上面那种匿名内部类的方式,需采用下面的方法 var operation: Operation = object:Operation { override fun add(a: Int, b: Int): Int { return a+b } } //kotlin中的抽象类也不能生成匿名内部类 var add: Operation = object:Add() { override fun add(a: Int, b: Int): Int { return a+b } } } } //抽象类 abstract class Add(): Operation{ } //定义接口interface open interface Operation { fun add(a: Int, b: Int): Int; }}
还可以使用typealias(声明函数类型别名)
typealias Operate<T> = (a:T,b:T) -> Tfun init() { var operate: (Int, Int) -> Int = { a:Int, b:Int ->a+b} operate.invoke(1,2)}
作者:dasan沈扬
链接:http://www.jianshu.com/p/a47b63430943
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
0 0
- Kotlin 开发Android :基本语法
- Kotlin开发Android(2): Kotlin声明变量常量方法等基本语法
- Kotlin开发之旅《二》—Kotlin的基本语法
- Android java到Kotlin的基本语法
- Android开发,Kotlin的了解与学习(四)-----基本语法之方法、操作符
- Android开发,Kotlin的了解与学习(五)-----基本语法之集合相关
- Kotlin 基本语法
- Kotlin基本语法
- kotlin基本语法
- kotlin基本语法
- Kotlin基本语法
- Kotlin基本语法
- Kotlin 基本语法 (一)
- Kotlin 基本语法 (二)
- Kotlin~基本语法
- KOtlin 基本语法
- kotlin---基本语法
- Kotlin基本语法
- 理解托管磁盘的原理与优势
- java中的反射和代理、object类
- Java IO之FileInputStream&FileOutputStream
- css复习——前段规范与多行文字居中
- 免费的客户订单及商品管理系统
- Kotlin 开发Android :基本语法
- Hive之 hive与rdbms对比
- MyEclipse
- Kafka原理详解
- skynet examples深入学习
- java 中的访问修饰符
- 在用户线程/主线程中推荐MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()函数
- 字符串转换
- SQL Server 2008中的代码安全(一):存储过程加密与安全上下文