1.extends? 用 (冐號(hào)):代替衙四。MainActivity extends Activity,
現(xiàn)在是? MaiActivity :Activity()
2.interface 用(逗號(hào))候学,代替。 A interface B{}
現(xiàn)在是? ,B{}
3.override 不現(xiàn)進(jìn) 注解复唤,而是用到了方法中
這樣寫(xiě) override fun onCreate(saveInstanceState:Bundle?)
4. 沒(méi)有switch case 了,
現(xiàn)在用when()?? ->
5.kotlin沒(méi)有object類(lèi)
現(xiàn)在是Any()沒(méi)有Object()
6.跟java一樣不能繼承final類(lèi)
繼承open abstract 類(lèi),并且默認(rèn)是open阔加,必須要寫(xiě)修飾符
7.不在有分號(hào)奢啥,
不在有分號(hào)秸仙,不在有分號(hào),不過(guò)可以寫(xiě)的
8. java中沒(méi)能返回值是void,返回值寫(xiě)在小括號(hào)左面
現(xiàn)在改成空方法是Unit,方法用fun1, fun2,代替扫尺, 并且返回值要寫(xiě)在小括號(hào)后面
fun Unit(x: Any, y: Any) {
funUnit(x: Any, y: Any): Int{
返回值可以用一個(gè)表達(dá)式寫(xiě)funadd(x:Int,y:Int):Int= x+ y
9.jave中每珍上對(duì)象都要new
kotlin不需要new這個(gè)關(guān)鍵字
10.在java中給控件不能直接賦值筋栋,
在kotlin里? 通過(guò)import kotlinx.android.synthetic.main.demo.*
text1.text = "hello world kotlin"這樣就完成了"hello world kotlin"
11.for循環(huán)也不一樣了? 在java中是這樣寫(xiě)的for(int i = ; i < 10; i++)
Kotlin是這樣寫(xiě)的for (i in 0..99) {
12.java中方法在括號(hào),
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
main_srl.setRefreshing(false);
}
}, 5000);kotlin是這樣寫(xiě)的Handler().postDelayed({main_srl!!.isRefreshing =false},5000)}
13.調(diào)用方法的不同正驻,個(gè)人目前發(fā)現(xiàn)除了調(diào)用set..Listener 還是原來(lái)的方法弊攘,其它的都改變了
一.
java中
main_srl.setOnRefreshListener(
kotlin中
main_srl!!.setOnRefreshListener{...
二.java中
main_srl.setRefreshing(false)
kotlin中
main_srl!!.isRefreshing = false? ? //雙嘆號(hào)的用法抢腐??襟交?
14 .->的用法
java中是這樣寫(xiě)的
recyclerViewAdapter.setOnItemClickedListener(new HeaderRecyclerViewAdapter.onItemClickedListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, "position " + position, Toast.LENGTH_SHORT).show();
}
});
kotlin這樣寫(xiě)的recyclerViewAdapter.setOnItemClickedListener{ view, position-> Toast.makeText(this@MainActivity, "position " + position, Toast.LENGTH_SHORT).show()}
15 . 強(qiáng)制轉(zhuǎn)換
java中? mHeader(View)
kotlin 中是mHeader as View
Add-non-null aserted 就是改變?yōu)椴皇强盏?mHeader!!
Case expressino? ? ? 就是強(qiáng)制轉(zhuǎn)換 mHeader as View
16.變量
1.java中分為二類(lèi)(基本迈倍,引用)八種(byte short int long flout double char boolean)
2.kotlin 中分有以下不同之睡
1.基本類(lèi)型中 java中有的kotlin也有,就是不能給一個(gè)int賦值為double
var i Int = 1;
var d Double = i .toDouble();? //其它也類(lèi)似這樣沒(méi)有java中的自動(dòng)提升捣域,強(qiáng)轉(zhuǎn)的說(shuō)法了L淙尽!焕梅!
2. | & 或 和 和 改為了? or 和 and
var testOr = Flag or Flags
var testAnd = Flag and Flags
3.變量 var? val? (這個(gè)類(lèi)似java中的final)
4.屬性? kotlin沒(méi)有g(shù)et,set方法迹鹅,直接賦值,直接使用
17. Anko具聽(tīng)說(shuō)是一個(gè)很代替xml繪制ui的強(qiáng)大的類(lèi)庫(kù)
18.java中asycTask
kotlin 中 async{
run(){
uiThread{...}
}}
19.with函數(shù)
with是一個(gè)非常有用的函數(shù)贞言,它包含在Kotlin的標(biāo)準(zhǔn)庫(kù)中斜棚。它接收一個(gè)對(duì)象和一個(gè)擴(kuò)展函數(shù)作為它的參數(shù),然后使這個(gè)對(duì)象擴(kuò)展這個(gè)函數(shù)该窗。這表示所有我們?cè)诶ㄌ?hào)中編寫(xiě)的代碼都是作為對(duì)象(第一個(gè)參數(shù))的一個(gè)擴(kuò)展函數(shù)弟蚀,
我們可以就像作為this一樣使用所有它的public方法和屬性。當(dāng)我們針對(duì)同一個(gè)對(duì)象做很多操作的時(shí)候這個(gè)非常有利于簡(jiǎn)化代碼酗失。
20.增強(qiáng)For循環(huán)
java中: for(集合 變量:集合名)
kotlin中:for(變量名in 變量集合)
21.三元表達(dá)式
java中(condition ? then : else)
kotlin中 if (a > b) a else b
fun main(args: Array) {
println(args[0].toInt())
println(args[1].toInt())
println(max(args[0].toInt(), args[1].toInt()))
}
fun max(a: Int, b: Int) = if (a > b) a else b
22. switch case
java中 switch(){
case:
breaak;
}
kotlin 中 when() ->
fun main(args: Array) {
val language = if (args.size == 0) "EN" else args[0]
println(when (language) {
"EN" -> "Hello!"
"FR" -> "Salut!"
"IT" -> "Ciao!"
"DU" -> "dub is a very excellent boy"
else -> "Sorry, I can't greet you in $language yet"
})
}
23.在java中是沒(méi)有""",這樣的符號(hào)
kotlin中:
fun main(args:Array){
val text = """
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin).
""".trimMargin()
print(text)
}
24.contait
java String中contains
kotlin
if ("ddd" in array) // collection.contains(obj) is called
println("Yes: array contains ddd")25.循環(huán)
java中:
1.得到key
for(String k:maps.keySet()){
System.out.println(k+":"+maps.get(k));
}
2.得到value
for(String value:maps.values()){
System.out.println(value);
}
3.得到key,和value
for(String string:map.keySet()){
Integer integer = map.get(string);
System.out.println(string +"....."+integer);
}
3.1通過(guò)Entry集合訪(fǎng)問(wèn)义钉,對(duì)Entry感興趣,可以訪(fǎng)問(wèn)與key對(duì)應(yīng)的Value值
for(Entry entry:maps.entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
4规肴、通過(guò)迭代Key集合訪(fǎng)問(wèn)Map集合捶闸,maps.keySet()返回的是一個(gè)Set集合,Set直接繼承Collection奏纪,所以可以對(duì)其進(jìn)行迭代鉴嗤。
Iterator iterator = maps.keySet().iterator();
while(iterator.hasNext()){
String key = iterator.next();
System.out.println(key+":"+maps.get(key));
}
Iterator> it = map.entrySet().iterator();//Map遍歷
while (it.hasNext()){
Map.Entry next = it.next();
System.out.println("second type --> "+ "key"+ next.getKey()+",value"+next.getValue());
}
5、通過(guò)迭代Values集合訪(fǎng)問(wèn)Map集合序调,maps.values()返回的是Collection醉锅,所以可以對(duì)其迭代。
Iterator iter= maps.values().iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
6发绢、通過(guò)迭代Entry集合訪(fǎng)問(wèn)Map集合硬耍,maps.entrySet()返回的是一個(gè)Set>,Set直接繼承Collection边酒,所以可以對(duì)其迭代经柴。
Iterator> it = maps.entrySet().iterator();
while(it.hasNext()){
Entry entry = it.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
7.項(xiàng)目中用到的高級(jí)寫(xiě)法
for (Iterator iterator = map.keySet().iterator(); iterator.hasNext(); ) {
StringBuffer sb = new StringBuffer();
String key = iterator.next();
sb.append("[").append(key).append("]");
for (int k = map.get(key); k < 4; k++){//初使化;循環(huán)體墩朦;循環(huán)條件
sb.append(k + ",");
}
}
kotlin中:fun main(args: Array) {
val numbers = listOf(1, 2, 3)
println(numbers.filter(::isOdd))//是這樣寫(xiě)的
}
fun isOdd(x: Int) = x % 2 == 0
26.如何定義變量
Java 定義變量的寫(xiě)法:String string = "hello"
基本等價(jià)的 Kotlin 定義變量的寫(xiě)法:var string :String = "hello"
27.Java 定義 final 變量的寫(xiě)法:
Java中這么寫(xiě) final String string = "hello"
Kotlin 當(dāng)中應(yīng)該這么寫(xiě) const val string:String = "hello"
28.如何定義函數(shù)
Java 當(dāng)中如何定義函數(shù)坯认,也就是方法,需要定義到一個(gè)類(lèi)當(dāng)中
public boolean testString(String name){...
等價(jià)的 Kotlin 寫(xiě)法:
fun testString(name:String) :Boolean{...
29.如何定義數(shù)組
Java 的數(shù)組非常簡(jiǎn)單,當(dāng)然也有些抽象牛哺,畢竟是編譯期生成的類(lèi):
String[] names = new String[]{"a","b",}
Kotlin 的數(shù)組其實(shí)更真實(shí)一些陋气,看上去更讓人容易理解:
val name:Array = arrayOf{"a","b"}//避免byte short 拆箱,裝箱? 寫(xiě)法為 XArray引润,例如 Int 的定制版數(shù)組為 val ints = intArrayOf(1,2,3)
val emptyStrings :Array = arrayOfNulls(10)//Array?T 即數(shù)組元素的類(lèi)型巩趁。另外,String? 表示可以為 null 的 String 類(lèi)型
30.如何寫(xiě)變長(zhǎng)參數(shù)
Java 的變長(zhǎng)參數(shù)寫(xiě)法如下:
void holle(String...names){...
Kotlin 的變長(zhǎng)參數(shù)寫(xiě)法如下:
fun hello(varargnames:String){...
31.如何寫(xiě)三元運(yùn)算符
Java 可以寫(xiě)三元運(yùn)算符:
int code = isSuccessfully?200:400;
Kotlin 該怎么寫(xiě)呢?
int code = if(isSuccessfully) 200 else 400
31.如何寫(xiě) main 函數(shù)
Java 的寫(xiě)法只有一種:
class MainJava{
public static void main(String []args){
...
Kotlin淳附,main 函數(shù)的寫(xiě)法如下:
class MainKotlin{
companion object{
@jvmStatic
fun main(args:Array){
...
32.如何實(shí)例化類(lèi)
Java中:
Dub dub = new Dub();
Kotlin中:
val dub = Dub();
33.如何寫(xiě) Getter 和 Setter 方法
Java 的 Getter 和 Setter 是一種約定俗稱(chēng)议慰,而不是語(yǔ)法特性,所以定義起來(lái)相對(duì)自由:
public class SetAndGet{
private int x = 0;
publc Int getX(){
return x;
public void setX(int x){
this.x = x;
Kotlin 是有屬性的:
class kotlinSetAndGet{
var x:Int = 0
set(value) {field = value}
get() = field
34.如何延遲初始化成員變量
Java 定義的類(lèi)成員變量如果不初始化奴曙,那么基本類(lèi)型被初始化為其默認(rèn)值? int 0;boolean false; String null;
public class Hello{
private String name;
Kotlin 當(dāng)中直譯為:
class Hello{
private var name:String? = null;//如果不使用可控類(lèi)型别凹,需要加 lateinit 關(guān)鍵字
class Hello{
private lateinit var name:String//lateinit 是用來(lái)告訴編譯器,name 這個(gè)變量后續(xù)會(huì)妥善處置的缆毁。
35.如果我要想定義一個(gè)可以延遲到一定實(shí)際再使用并初始化的 final 變量番川,這在 Java 中是做不到的
Kotlin 有辦法到涂,使用 lazy 這個(gè) delegate 即可:
class Hello{
private val name by lazy{
NameProvider.getName()
java中可以 類(lèi)名.class ,對(duì)象.getClass();Class.forName("");
剛剛接觸 Kotlin 的時(shí)候脊框,獲取 Java Class 的方法卻是容易讓人困惑:
class Hello
val clazz = Hello::class.java? //拿到的是 Kotlin 的 KClass
如果想要拿到 Java 的 Class 實(shí)例,那么就需要前面的辦法了践啄。
37.List集合要重新劃分了
不在是Listlists = new ArrayList<>();
而是private var list MutableList ?= null
38.成員變量的寫(xiě)法
companion object {
private valTAG = FirstActivity::class.java.simpleName
}//寫(xiě)在compaintion里
39.在Kotlin中寫(xiě)上下文不再是類(lèi)名點(diǎn)this了而是
hsMain!!.OnSelectList{ text-> Toast.makeText(this@MainActivity, text, Toast.LENGTH_SHORT).show()
40.Kotlin中的空是Unit表示相當(dāng)于void
41.伸展 spread符是什么鬼? (在數(shù)組前面加上 *)浇雹,Java中可是沒(méi)有
vala=arrayOf(1,2,3)vallist=asList(-1,0,*a,4)
42.Kotlin竟支持局部函數(shù),在Java中也是沒(méi)有的
fun test(graph:Graph){
fun text(current:Vertex,visited:Set){
if(!visited.add(current) return
for(v in curren.neighbors)
test(v,visited)
test(graph.vertices[0],HashSet())
43. 屿讽?.和 U蚜椤!. 的區(qū)別伐谈?
首先聲名在java中是沒(méi)有這個(gè)語(yǔ)法的烂完,
在kotlin中說(shuō)下它們之間的不同
if( is != null) is.change(); 在kotlin中是這樣的 is?.change()
!!.就是非空判斷了
最后是本人在學(xué)習(xí)中有點(diǎn)迷惑的地方,后續(xù)進(jìn)行完善也希望博友知道的進(jìn)行講解QQ:277627117
val qq =et_qq!!.text.toString().trim{ it <=' '}//這里的it是什么意思fun main(args: Array) {
val oddLength = compose(::isOdd, ::length)//???
val strings = listOf("a", "ab", "abc")
println(strings.filter(oddLength))
}
fun isOdd(x: Int) = x % 2 != 0
fun length(s: String) = s.length
fun compose(f: (B) -> C, g: (A) -> B): (A) -> C {
return { x -> f(g(x)) }
}