在kotlin中调用java 父类转子类报错

来源:2-2 Number数据类型

慕沐5275570

2019-08-29

老师您好,我在使用一个第三方库的方法时
自定义了一个User类,并且继承了该第三方库的AVUser类(Java)
然后在User类中,调用父类AVUser类的静态方法
以前在java中这样写

public static User getCurrentUser() {
	return getCurrentUser(User.class);
 }

现在在kotlin中这样写

fun getCurUser() = AVUser.getCurrentUser(User::class.java)

然后就报了类型转换错误

“cn.leancloud.AVUser cannot be cast to com.leonyang.huo.data.User”

下面是父类AVUser类的getCurrentUser方法声明

public static <T extends AVUser> T getCurrentUser(Class<T> userClass) {
    AVUser user = PaasClient.getStorageClient().getCurrentUser();
    if (null != user && userClass.isAssignableFrom(user.getClass())) {
      return (T) user;
    } else if (userArchiveExist()) {
      File currentUserArchivePath = currentUserArchivePath();
      synchronized (AVUser.class) {
        String jsonString = PersistenceUtil.sharedInstance().readContentFromFile(currentUserArchivePath);
        if (!StringUtil.isEmpty(jsonString)) {
          if (jsonString.indexOf("@type") >= 0 || jsonString.indexOf(ObjectTypeAdapter.KEY_VERSION) >= 0) {
            // new version.
            try {
              user = (AVUser) AVObject.parseAVObject(jsonString);;
              PaasClient.getStorageClient().setCurrentUser(user);
            } catch (Exception ex) {
              logger.w("failed to deserialize AVUser instance.", ex);
            }
          } else {
            // older format
            try {
              T newUser = userClass.newInstance();
              Map<String, Object> rawData = JSON.parseObject(jsonString, Map.class);
              newUser.resetServerData(rawData);
              changeCurrentUser(newUser, true);
              user = newUser;
            } catch (Exception ex) {
              logger.w(ex);
            }
          }
        }
      }
    }
    if (enableAutomatic && null == user) {
      try {
        user = userClass.newInstance();
        changeCurrentUser(user, true);
      } catch (Exception ex) {
        logger.w(ex);
      }
    }
    return (T) Transformer.transform(user, userClass);
  }

请问我应该解决呢,感谢。

写回答

1回答

bennyhuo

2019-08-29

这应该不是kotlin的问题,感觉是运行时的user是别的类型,导致强转失败了吧?主要是看你拿到的类型到底是什么类型

0
1
慕沐5275570
非常感谢!
2019-09-20
共1条回复

Android首选开发语言Kotlin入门与进阶

Google I/O大会钦定Android一级开发语言,现在不学,等待何时

3122 学习 · 387 问题

查看课程