【发布时间】:2021-07-09 15:41:27
【问题描述】:
我正在尝试从 Firestore 中提取会话数据(数字),但出现 java.lang.Long cannot be cast to java.lang.Double 错误。
我已经阅读了关于在 long 和 double 之间转换的类似文章,尽管还没有实现对我有用,也许我没有正确实现它们。谁能告诉我哪里出错了。 我已经尝试过了,但也导致了错误:
Long x = (Long) session.get("rep_set1");
s.setRepsSet1((double) x);
这是完整的方法:
public class BenchSessionModel extends Session {
public BenchSessionModel() {
type = ExerciseType.BENCH;
}
public static BenchSessionModel fromJson(Map<String, Object> session) {
BenchSessionModel s = new BenchSessionModel();
s.setRepsSet1((double) session.get("rep_set1"));
s.setRepsSet2((double) session.get("rep_set2"));
s.setRepsSet3((double) session.get("rep_set3"));
s.setGoalReps((double) session.get("goal_reps"));
s.setGoalWeight((double) session.get("goal_weight"));
s.setRpe((double) session.get("rpe"));
s.setWeight((double) session.get("weight"));
s.setStallCount((int) session.get("stall_count"));
String exp= (String) session.get("level");
if(exp.equalsIgnoreCase("beginner")){
s.setXpLevel("BEGINNER");
}else{
s.setXpLevel("ADVANCED");
}
s.setType(ExerciseType.BENCH);
return s;
}
}
【问题讨论】:
-
Long 不是 Double,Double 不是 Long。就像 ArrayList 不是字符串一样。我们人类知道它们在概念上都是数字,所以它们看起来应该是可转换的。编译器没有。你可以打电话给
someLong.doubleValue(),它会给你一个原始的double,如果需要的话会自动装箱成一个Double。 -
鸽子的蛋不是鸡的蛋,无论你多么频繁地尖叫“做鸡的蛋”。
-
您可以将
long转换为double,但您不能将Long转换为double。 -
@GhostCat 我如何在不考虑邻居的情况下通过实验验证这个假设?
-
好的,这些值作为数字存储在 Firestore 中,当我拉取它们时,我需要它们以双精度的形式出现,我该怎么做?他们似乎从 Firestore 来了很长时间
标签: java google-cloud-firestore