Java 类型不匹配:无法从元素类型对象发展为字符串
下面是subkey.Keyset的代码片段,它“类型不匹配:无法从元素类型对象发展为字符串” 上面的这一位是下面代码中错误由“subkey.keySet”组成的部分Java 类型不匹配:无法从元素类型对象发展为字符串,java,Java,下面是subkey.Keyset的代码片段,它“类型不匹配:无法从元素类型对象发展为字符串” 上面的这一位是下面代码中错误由“subkey.keySet”组成的部分 public void run(){ if(this.running){ return; } this.running = true; while(this.running){ synchronized(LOCK){ if(msglist.size
public void run(){
if(this.running){
return;
}
this.running = true;
while(this.running){
synchronized(LOCK){
if(msglist.size() != 0){
@SuppressWarnings("rawtypes")
HashMap newmsglist = new HashMap();
for(String player : msglist.keySet()){
@SuppressWarnings("rawtypes")
HashMap subkey = (HashMap)msglist.get(player);
@SuppressWarnings("rawtypes")
HashMap newsubkey = new HashMap();
for(String msgtype : subkey.keySet()){
int time = ((Integer)subkey.get(msgtype)).intValue();
time--;
if(time > 0){
newsubkey.put(msgtype, Integer.valueOf(time));
}
}
if(newsubkey.size() > 0){
newmsglist.put(player, newsubkey);
}
}
msglist = newmsglist;
}
}
if(this.running){
try{
sleep(this.sleepTime * 1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
this.running = false;
}
不抑制警告:
@SuppressWarnings("rawtypes")
HashMap subkey = (HashMap)msglist.get(player);
在这里,您可以有效地说“假设子键是从对象到对象的映射。”
两行之后,您将获得字符串键
难怪编译器会感到困惑。首先,不要抑制警告!它们可以帮助您避免犯类似于此处所犯的错误 HashMap是一个标准java集合对象,它允许任意类型的元素(称为键)映射到另一组任意的、可定义类型的元素(称为值) 虽然实际的映射过程是基于对象散列的,但是泛型最终促进了将任意类型的键映射到任意类型的值的能力 归根结底,如果未指定,HashMap将把
Object
键映射到Object
值。虽然这个HashMap在映射方面在技术上是包罗万象的,但当您将元素放入HashMap时,您会丢失类型信息(它们作为Object
类型的元素存储在非常模糊的位置)
当您尝试检索映射的键集并使用增强的for循环对其进行迭代时,编译器意识到它无法将一组类型对象
安全地强制转换为单个字符串
对象(即对象
不等于字符串
的子类)强制编译器抛出所述错误
要修复此问题,只需为HashMap指定一个更具体的类型,如下所示:
HashMap<String, Integer> subkey;
如果
msglist
是带有类型签名的映射map
a.keySet()
返回一个Java集合
;您的键必须是字符串
类型,所以子键中的键不是字符串……您的问题到底是什么?对Java来说非常陌生,只需要知道如何修复错误@machine错误修复@ManuOkay抱歉,我已经修复了这个问题,现在我有一个问题,上面写着方法getInstance()对于类型MsgThread@ingo是未定义的,非常感谢您花时间在这方面,这意味着很多:如果您能帮我看一下,并告诉我为什么getInstance会使用方法getInstance()对于MsgThread类型是未定义的,我将如何定义它?@CPUTerminator@Noongrboy关于这个问题,我完全偏离了主题,但我确实查看了您的代码,在任何地方都找不到它的声明或导入语句(MsgThread)。我根本无法确定或甚至无法推断它是什么类型的对象,因此无法帮助您。如果它是您自己创建的某个类,请尝试自己调试该类。如果您确实遇到了问题,请将其作为单独的问题发布。包括相关的代码段,具体描述您的问题,并演示您已经为之付出的努力解决眼前的问题。
HashMap<String, Integer> subkey;
HashMap<String, Integer> subkey = msglist.get(player);
HashMap<String, Integer> subkey = (HashMap<String, Integer>) msglist.get(player);