为了账号安全,请及时绑定邮箱和手机立即绑定

急求!!!!java中如何实例化类?

急求!!!!java中如何实例化类?

白猪掌柜的 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 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信