此代码打印IS STRING
,表示该映射值为String。
if(mymap.get("name") instanceof String ) {
System.out.print("IS STRING");
}
那么为什么String newName = mymap.get("name");
会抛出错误Type mismatch: cannot convert from Object to String.
这是我用来初始化地图的地方,其中textName.getText()
是在java swing GUI中输入的字符串:
Map<String,String> mymap = new HashMap<String,String>(10);
mymap.put("name", textName.getText());
这是相关代码:
public void actionPerformed(ActionEvent evt){
Map<String,String> mymap = new HashMap<String,String>(10);
mymap.put("name", textName.getText());
makeDocx(mymap);
}
public static void makeDocx(Map mymap) {
String newName = mymap.get("name");
textReplace(oSelection, "[Name]", newName, oWord);
}
答案 0 :(得分:2)
你的问题在于这个方法:
public static void makeDocx(Map mymap) {
String newName = mymap.get("name");
textReplace(oSelection, "[Name]", newName, oWord);
}
replacements
被声明为Map
,与Map<Object, Object>
相同。您想要的是将其更改为Map<String, String>
:
public static void makeDocx(Map<String, String> mymap) {
String newName = mymap.get("name");
textReplace(oSelection, "[Name]", newName, oWord);
}
作为一般规则,如果您使用的是使用泛型的对象,但未声明您正在使用的类型,那么就会出现问题。一个好的IDE,比如Eclipse或Netbeans,会在Map replacements
下发出警告,说你应该添加类型。
作为旁注,您可能想知道为什么要与Map<String, String> replacements
进行Map replacements
而不是String newName = (String) replacements.get("name");
。想象一下,如果你调用方法makeDocx
,但是在事故发生时你通过了Map<String, Integer>
。这将导致程序尝试将Integer
转换为String
,这是不可能的。我们希望尽可能避免错误,因此我们应该确保强制地图为Map<String, String>
。