账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于Kotlin反射中实例化类的问题
    70
    0

    先上java代码:

    
    public class TUtil {
        public static <T> T getT(Object o, int i) {
            try {
                return ((Class<T>) ((ParameterizedType) (o.getClass()
                        .getGenericSuperclass())).getActualTypeArguments()[i])
                        .newInstance();
            } catch (InstantiationException e) {
            } catch (IllegalAccessException e) {
            } catch (ClassCastException e) {
            }
            return null;
        }
    }
    
    //调用者只需要:
    public abstract class BaseMVPActivity<T extends BasePresenter, E extends BaseModel>
    ···省略代码····
    mPresenter = TUtil.getT(this, 0);
    mModel = TUtil.getT(this, 1);
    ···省略代码····

    我尝试使用kotlin去写这个util类:

    
    class KClassUtil {
        companion object {
            inline fun <reified T> getKType(K: Any,position:Int):T {
                var parameterizedType = K::class.java.genericSuperclass as ParameterizedType
                var actualTypeArguments = parameterizedType.actualTypeArguments
                return ( actualTypeArguments[position].javaClass as Class<T>).newInstance()
            }
        }
    }
    
    //调用者只需要:
    abstract class BaseMVPActivity<T : BasePresenter<*, *>, E : BaseModel> : BaseActivity()
    ···省略代码····
    mPresenter = KClassUtil.getKType(this, 0)   //这里报错了
    mModel = KClassUtil.getKType(this, 1)       //这里报错了
    ···省略代码····
    Cannot use 'T' as reified type parameter. Use a class instead.

    这里kotlin中一定要我写入具体的Class,但由于这里是抽象类无法知道具体的class是什么,请问如何解决这个问题?

    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部