第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有沒有辦法教 Android Studio 中的 java-> kotlin 轉(zhuǎn)換器在轉(zhuǎn)換

有沒有辦法教 Android Studio 中的 java-> kotlin 轉(zhuǎn)換器在轉(zhuǎn)換

不負(fù)相思意 2023-12-10 15:06:53
例如((MyView)view.findViewById(R.id.my_view)).doSomething()它轉(zhuǎn)換成(view.findViewById(R.id.my_view) as MyView).doSomething()雖然我希望它是view.findViewById<MyView>(R.id.my_view).doSomething()
查看完整描述

2 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

Java 到 Kotlin 轉(zhuǎn)換器工作正常,它生成等效的代碼。您的 Java 代碼包含顯式強(qiáng)制轉(zhuǎn)換,Kotlin 代碼也會(huì)包含它們。


如果您想要所描述的行為,請首先轉(zhuǎn)到 的 Android 9 通用語法findViewById。


然后這段Java代碼


// Old

final TextView view0 = (TextView)activity.findViewById(id);

// New

final View     view1 = activity.findViewById(id);

final TextView view2 = activity.findViewById(id);

// Not useful

final View     view3 = activity.<TextView>findViewById(id);

將轉(zhuǎn)換為這個(gè) Kotlin 代碼


val view0 = activity.findViewById<View>(id) as TextView

val view1 = activity.findViewById<View>(id)

val view2 = activity.findViewById<TextView>(id)

val view3 = activity.findViewById<TextView>(id)


查看完整回答
反對 回復(fù) 2023-12-10
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以為這樣的代碼打開警告。


轉(zhuǎn)到(設(shè)置 -> 編輯器 -> 檢查 -> Kotlin Android -> Cast 可以使用類型參數(shù)轉(zhuǎn)換為 findViewById)并將嚴(yán)重性切換為警告。


我不認(rèn)為 conventer 本身可以被教導(dǎo)應(yīng)該將這個(gè)特定的演員轉(zhuǎn)換為其他東西。事實(shí)上,我想說這是預(yù)期的行為。


請注意,在 Android SDK 28 以上,即使在 java 中也不需要該轉(zhuǎn)換:


public void hideChildTextView(View parent, @IdRes int id) {

    TextView view = parent.findViewById(id);

    view.setVisibility(View.GONE);

}

該代碼將被翻譯為:


fun hideChildTextView(parent: View, @IdRes id: Int) {

    val view = parent.findViewById<TextView>(id)

    view.visibility = View.GONE

}

這是因?yàn)轭愋涂梢詮臍w檔類型中獲取,并且不需要強(qiáng)制轉(zhuǎn)換(或者它實(shí)際上是由庫強(qiáng)制轉(zhuǎn)換的)。


那么,我們來看看28以下的SDK中的其他代碼:


public void hideChildTextView2(View parent, @IdRes int id) {

    TextView view = (TextView) parent.findViewById(id);

    view.setVisibility(View.GONE);

}

這將轉(zhuǎn)換為:


fun hideChildTextView2(parent: View, @IdRes id: Int) {

    val view = parent.findViewById(id) as TextView

    view.visibility = View.GONE

}

那么,這是為什么呢?android 28 下面的方法findViewById僅返回 View (因此我們需要將其轉(zhuǎn)換為正確的類型),但上面的方法返回<T extends View>,因此編譯器能夠進(jìn)行自動(dòng)轉(zhuǎn)換。


那么,我會(huì)建議什么呢?將您的編譯/目標(biāo) SDK 更新到 28+,清理 Java 中的代碼,然后它就會(huì)按您想要的方式工作。;)


查看完整回答
反對 回復(fù) 2023-12-10
  • 2 回答
  • 0 關(guān)注
  • 215 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號