Kotlin一周總結(jié)

坑坑洼洼的摸索了近一周Kotlin,記錄一下遇到的坑。

所有的數(shù)據(jù)類型,都要顯示轉(zhuǎn)換

//api
public static ObjectAnimator ofFloat(Object target, String propertyName, float... values)
//java調(diào)用
ObjectAnimator.ofFloat(tabLayout, "alpha", 0, 1)
//kotlin調(diào)用
ObjectAnimator.ofFloat(tabLayout, "alpha", 0f, 1f)

所有的數(shù)據(jù)類型都要顯示轉(zhuǎn)換,java可以缺省,kotlin不行,會報(bào)錯(cuò)

如果語法正確的情況下報(bào)錯(cuò),可能是沒正確配置,或沒加載

簡單的,我做個(gè)跳轉(zhuǎn),java飄紅,最后發(fā)現(xiàn)是因?yàn)闆]加載全部包

另外,如果你需要其他的包,發(fā)現(xiàn)沒有,也可能是需要額外在gradle中加載,例如async

//java報(bào)錯(cuò),加載完成ok了
intent = Intent(this, RegisterActivity::class.java)

泛型

泛型可以說是最大的一個(gè)坑,但是Kotlin表示自己有理,因?yàn)閗otlin需要完全指定類類型,因此您可以指定特定類型為類型參數(shù),或者傳遞一個(gè)新的類型參數(shù)。

這里用android說話,一個(gè)java基類,泛型是可以缺省的,然而在kotlin中就不行,必須傳值,雖然kotlin提供了替代方案<*, *>,然而這是針對<T,E>這種格式的

//基類
class BaseActivity<T extends BasePresenter, E extends BaseModel>
//正確
class LoginActivity : BaseActivity<BasePresenter<*, *>, BaseModel>()
//錯(cuò)誤
class MainActivity : BaseActivity<*, *>()

也就是只要指定了泛型,就必須傳值,對于Any類型的泛型可以指定*替代,其他的必須傳,空的也行

const常量

由于越寫越多,避免冗余就單獨(dú)拉出來了

Kotlin中的const常量

注入框架

做Android大多會用到注入框架,我之前做Android一直用的Butter Knife,最近雖說用Kotlin寫java,但查資料的時(shí)候看到了這個(gè)框架——Kotter Knife,于是很自然的想到了,Kotlin是不是不能用了,就去試了一下,報(bào)了個(gè)異常:KotlinNullPointerException

Kotter Knife說明也很簡單:View "injection" library for Android。

URL:https://github.com/JakeWharton/kotterknife

不過話說,我一般都配合生成器一起使用,剛看了一下kotlin也沒有相關(guān)生成器,語法的確簡潔一些,但也省不了多少代碼,于是還是棄用了

框架大全

https://www.kotlincn.net/docs/resources.html

擴(kuò)展函數(shù)

今天遇到個(gè)問題,找了個(gè)kotlin群,讓做個(gè)StringBuffer的擴(kuò)展函數(shù),就照貓畫虎的寫了一個(gè),想著以后可能要用到,就記下來

  • StringBuffer:表示函數(shù)的接收者,也就是函數(shù)擴(kuò)展的對象
  • . :擴(kuò)展函數(shù)修飾符
  • append:擴(kuò)展函數(shù)的名稱
  • (...):擴(kuò)展函數(shù)的參數(shù),可以為null
    fun StringBuffer.append(stringBuffer: StringBuffer,string: String){
        stringBuffer.append(string)
    }
    
    //然后就可以用了
    val buffer = StringBuffer()
        buffer.append(buffer,"123")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容