剛開始自學(xué)Kotlin,因?yàn)楹蚃ava很像柄慰,基礎(chǔ)部分還是比較容易理解的鳍悠,但是Kotlin有自己的特性。
在Kotlin里面我們發(fā)現(xiàn)沒有靜態(tài)變量和方法的說法坐搔,習(xí)慣了Java中使用靜態(tài)方法還真有點(diǎn)不適應(yīng)藏研。
開始在網(wǎng)上查找資料時(shí)大多會(huì)說使用伴生對(duì)象的方法來模擬靜態(tài)。后來在官方文檔中發(fā)現(xiàn)其實(shí)這種方式不是最好的實(shí)現(xiàn)方法概行。
那首先看下在Java中靜態(tài)方法和靜態(tài)變量的使用方式:
public class StaticDemo {
public static int number = 1;
public static int getId(){
return 2;
}
}
使用也很簡(jiǎn)單
public static void main(String[] args){
int number = StaticDemo.number;
int id = StaticDemo.getId();
}
那Kotlin中的寫法呢蠢挡?
我們使用伴生對(duì)象的方式看下:
class KtStatic {
var number1 = 10
fun getId1():Int{
return 11
}
//伴生對(duì)象
companion object{
var number2 = 20
fun getId2():Int{
return 21
}
}
}
在看下在Kotlin中使用和Java中使用有什么不同
//Kotlin中
fun main(args: Array<String>) {
// 不可直接訪問number1
// var number1 =KtStatic.number1
// 同樣不能直接訪問getId1
// var id1 = KtStatic.getId1()
// 使用下面方式看起來和在Java中使用的是一樣的
var number2 = KtStatic.number2
var id2 = KtStatic.getId2()
}
Java中使用有了變化
public static void main(String[] args) {
// 不可訪問,好理解
// int number1 = KtStatic.number1;
// 也不可訪問凳忙,
// int number2 = KtStatic.number2;
// 正確訪問方式业踏,意外吧,呵呵
int number = KtStatic.Companion.getNumber2();
int id = KtStatic.Companion.getId2();
}
這種方法實(shí)際Companion相當(dāng)于內(nèi)部類
那么下面來說另一種寫法:
package com.yiifox.demo
var number = 1
fun getId():Int{
return 2
}
//方便知道我寫的文件名
class Kt2Static
Kotlin中使用
package com.yiifox.demo.test
import com.yiifox.demo.KtStatic
import com.yiifox.demo.getId
import com.yiifox.demo.number
fun main(args: Array<String>) {
// 使用很簡(jiǎn)單涧卵,但是要注意導(dǎo)包
var number2 = number
var id = getId()
}
那么在Java中呢勤家?
public static void main(String[] args) {
// 注意,原來寫的類名是Kt2Static柳恐,使用時(shí)卻多了個(gè)尾巴Kt
int number = Kt2StaticKt.getNumber();
int id = Kt2StaticKt.getId();
}
這種就是比較符合我們的使用了伐脖。
關(guān)于在Kotlin中明明定義的是
var number = 1
Java中卻使用的是getNumber();是因?yàn)镵otlin在轉(zhuǎn)化為Java時(shí)會(huì)自動(dòng)進(jìn)行g(shù)et乐设、set包裝讼庇。