在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回答
-
这应该不是kotlin的问题,感觉是运行时的user是别的类型,导致强转失败了吧?主要是看你拿到的类型到底是什么类型
012019-09-20
相似问题