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

先上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是什么,请问如何解决这个问题?
白猪掌柜的
浏览 299回答 2
2回答

侃侃尔雅

你无法获取这个泛型T的class,正确的获取方法应该是在BaseMVPActivity声明一个抽象的protected变量,由具体的activity去实现这个变量,比如protectedabstractvalpresenterClassToken:Class然后,在具体的activity继承这个BaseMVPActivity的时候,实现这个变量,XXXPresenter指具体的presenter实现类classXXXXActivity(overridevalpresenterClassToken:Class):BaseMVPActivity以上,请参考

阿波罗的战车

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}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript