gpt4 book ai didi

java - 为什么 HashMap#get 返回一个对象而不是字符串?

转载 作者:行者123 更新时间:2023-12-02 05:45:09 24 4
gpt4 key购买 nike

此代码打印 IS STRING,这意味着该映射值是一个字符串。

if(mymap.get("name") instanceof String ) {
System.out.print("IS STRING");
}

那么为什么String newName = mymap.get("name");会抛出错误类型不匹配:无法从对象转换为字符串。

这是我用来初始化 map 的方法,其中 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);
}

最佳答案

您的问题在于此方法:

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 replacementsString newName = (String) replacements.get("name"); 。想象一下,如果您调用方法 makeDocx ,但你通过了它 Map<String, Integer>发生意外时。这将导致程序尝试转换 IntegerString ,这是不可能的。我们希望尽可能避免错误,因此我们应该确保强制 map 为 Map<String, String> .

关于java - 为什么 HashMap#get 返回一个对象而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24149394/

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