gpt4 book ai didi

java.lang.Long 不能转换为 java.lang.Integer

转载 作者:行者123 更新时间:2023-12-04 14:00:11 24 4
gpt4 key购买 nike

我想看 map map来自数据库 (Firebase),我将其与另一张 map 进行比较 motcle , 如果我找到重复的键,我会增加 map 中键的值,我有一个 ClassCastException。
编码:

public void addMotcle(final Map motcle, String Userid)
{
mDatabase = FirebaseDatabase.getInstance().getReference("User");
DatabaseReference user = mDatabase.child(Userid);
final DatabaseReference keylist = user.child("motcle");
keylist.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
{
//I tried to put the map in another map and change it but
//It is still the same error
Map<String,Integer> map = (Map) dataSnapshot.getValue();
Map<String,Integer>Hmap= new HashMap<>();
Hmap.putAll(map);
//if there is duplicate we incremente les mots clé
for (Object key : motcle.keySet()) {
if (Hmap.containsKey(key)) {
Hmap.put((String)key,((Integer) Hmap.get(key))+1);
}
else
{
Hmap.put((String) key,1);
}
}
keylist.setValue(Hmap);

}
else
{
keylist.setValue(motcle);

}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});



}

这是我想在 Firebase 中写入的值 Data

错误在行 map.put((String)key,map.get(key)+1);
为什么我不能写一个 Integer在我声明的值中 mapMap<String,Integer> ?

最佳答案

当您这样做时Map<String,Integer> map = (Map) dataSnapshot.getValue(); ,您保证mapMap ,但并不是说它是 Map<String, Integer> .由于泛型被删除并且在运行时不可用,只要 dataSnapshot.getValue()Map某种意义上,这个 Actor 会成功。

因为你已经声明 Hmap作为 Map<String,Integer> ,当您从 map 中获取值时,它会尝试将其强制转换为 Integer ,但实际上并不能提前保证它将是一个整数。结果,如果值实际上是 Long ,它会尝试转换 LongInteger并失败(因为 Long 不扩展 Integer ,并且加宽操作不适用于盒装类型)。

您需要找出dataSnapshot.getValue() 的值的实际类型是什么。是,并将其转换为正确的类型 Map以避免这个错误。

详情请看这里:Weird problem about Java Generics operation

关于java.lang.Long 不能转换为 java.lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50180246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com