java - <String,String> 类型的哈希表正在存储 <String, Integer> 类型的值,正如我在日志猫和调试器中看到的那样。是否可以?

标签 java android hashtable

这是我在这里发布的第一个问题。由于你们已经回答了很多问题,而且通常我都能找到答案,这要感谢 stackoverflow。 所以针对我的问题- 我有一个静态 Hastable类型 <String,String> .当我从其他一些 Activity 中设置值和键时,在某些特定情况下(我不确定这种情况)我的 Hastable<String, Integer> 类型的数据.我检查了调试器它也显示相同。我犯了什么错误任何人都可以帮我指出问题吗? 谢谢。

编辑 这是我的代码-

       Hashtable<String,String> details;
        details= new Hashtable<>();
        Hashtable temp;
        temp = details;
        temp.put("key1", new Integer("1"));
        temp.put("key2", "1");
        Log.d("details", details.get("key1"));//Causes ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        Log.d("temp",temp.get("key1").toString());//No issue ,worked

最佳答案

Can a Hashtable of type <String,String> contains value of type <String, Integer>

是的,这是可能的。 Hashtable 的实际运行时类型使用 Object作为键和值类型。 (更详细的解释谷歌“java类型删除”...)

例如,当你这样写的时候:

 Hashtable<String, String> tab = new Hashtable<>();
 tab.put("A", "B");
 String res = tab.get("A");

最后一条语句实际上是在幕后进行的:

 String res = (String) tab.get("A");

如果您遵守规则,那么类型转换永远不会失败。

What mistake I have made can anyone please help me pointing the issues?

在没有看到您的代码的情况下,我们只能猜测,但一种可能的解释是您忽略(或抑制)了关键的“未经检查的转换”警告或类似警告。例如:

 Hashtable<String, Integer> tab = new Hashtable<>();
 tab.put("A", new Integer(42));

 // Unchecked conversion
 Hashtable<String, String> bad = (Hashtable<String, String>) tab;

 String res = bad.get("A");    // Ooops!

您永远不应该忽略编译器警告。有时压制它们是安全的,但您确实需要了解它们的含义才能做出判断。如果您只是在没有适当考虑的情况下抑制它们,您可能会编写错误代码,在意想不到的地方抛出 ClassCastException。

关于java - <String,String> 类型的哈希表正在存储 <String, Integer> 类型的值,正如我在日志猫和调试器中看到的那样。是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31549247/

相关文章:

Java:泛型捕获错误

java - 验证电子邮件(不发送确认)

java - 使用Java访问网络中的文件

java - 使用对象类型将数组列表存储在共享首选项中

c++ - 使用不同的模板参数调用模板类的对象

powershell - 哈希表Get_Item返回空行-Powershell

java - 排序数组与哈希表 : Which data structure would be more efficient in searching over a range of dates in a calendar app?

android - 在不对 subview 进行动画处理的情况下对 ViewGroup 进行动画处理

android - 如何以编程方式将 autoSizeTextType 统一?

Android onActivityResult