亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

急求!?。?!java中如何實例化類?

急求?。。。ava中如何實例化類?

白豬掌柜的 2019-06-12 08:50:45
先上java代碼:publicclassTUtil{publicstaticTgetT(Objecto,inti){try{return((Class)((ParameterizedType)(o.getClass().getGenericSuperclass())).getActualTypeArguments()[i]).newInstance();}catch(InstantiationExceptione){}catch(IllegalAccessExceptione){}catch(ClassCastExceptione){}returnnull;}}//調用者只需要:publicabstractclassBaseMVPActivity···省略代碼····mPresenter=TUtil.getT(this,0);mModel=TUtil.getT(this,1);···省略代碼····我嘗試使用kotlin去寫這個util類:classKClassUtil{companionobject{inlinefungetKType(K:Any,position:Int):T{varparameterizedType=K::class.java.genericSuperclassasParameterizedTypevaractualTypeArguments=parameterizedType.actualTypeArgumentsreturn(actualTypeArguments[position].javaClassasClass).newInstance()}}}//調用者只需要:abstractclassBaseMVPActivity<T:BasePresenter,E:BaseModel>:BaseActivity()···省略代碼····mPresenter=KClassUtil.getKType(this,0)//這里報錯了mModel=KClassUtil.getKType(this,1)//這里報錯了···省略代碼····Cannotuse'T'asreifiedtypeparameter.Useaclassinstead.這里kotlin中一定要我寫入具體的Class,但由于這里是抽象類無法知道具體的class是什么,請問如何解決這個問題?
查看完整描述

2 回答

?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

你無法獲取這個泛型T的class,正確的獲取方法應該是在BaseMVPActivity聲明一個抽象的protected變量,由具體的activity去實現這個變量,比如protectedabstractvalpresenterClassToken:Class然后,在具體的activity繼承這個BaseMVPActivity的時候,實現這個變量,XXXPresenter指具體的presenter實現類classXXXXActivity(overridevalpresenterClassToken:Class)
:BaseMVPActivity
以上,請參考
                            
查看完整回答
反對 回復 2019-06-12
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

reifiedT沒必要去實化泛型參數,因為在其內部并沒有需要獲取T::class的地方。
按照你的思路的話,直接保持原有Java的寫法就可以了:
objectTUtil{
fungetT(o:Any,i:Int):T?{
try{
return((o.javaClass
.genericSuperclassasParameterizedType).actualTypeArguments[i]asClass)
.newInstance()
}catch(e:InstantiationException){
}catch(e:IllegalAccessException){
}catch(e:ClassCastException){
}
returnnull
}
}
                            
查看完整回答
反對 回復 2019-06-12
  • 2 回答
  • 0 關注
  • 314 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號