不必要的类型转换?
Unnecessary type casting?
我正在读这个 books 并且有一个代码示例让我感到困惑,我在下面描述的片段中令人困惑的部分:
private Hashtable rates = new Hashtable();
void addRate(String from, String to, int rate) {
rates.put(new Pair(from , to), new Integer(rate)); // Pair is a value object.
}
int rate(String from, String to) {
Integer rate = (Integer) rates.get(new Pair(from, to)); // The confusing part.
return rate.intValue();
}
如果值已经是 Integer
类型,为什么作者需要在从 HashTable
获取值时进行类型转换?
根据 documentation,Hashtable
的默认用法创建一个散列映射,其中键是一个 Object
类型的对象,也是一个 [=11] 类型的值=].
虽然您放置的是整数值,但当您读回它们时,您无法保证对象是什么,因此您需要对其进行类型转换。由于您放置的内容可以转换为整数,因此转换不会失败。
不需要转换的替代方法是使用通用版本。
如果您声明哈希表并提及您将在其中存储整数,则不需要类型转换。
例如 -
Hashtable<String, Integer> numbers = new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
Integer n = numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}
编辑:
当 Java 中没有泛型时,没有注意到提到的那本书 OP 已经很老了。
所以给 OP 的建议 - 参考最新资源。
给你的东西:
您正在阅读 this:
Product Details Paperback: 240 pages Publisher: Addison-Wesley
Professional; 1 edition (November 18, 2002) Language: English ISBN-10:
0321146530 ISBN-13: 978-0321146533 Product
对于那个日期,可以是 java 1.3 or maybe at the most java 1.4
所以那一定是一本非常古老的书,实际的 java HashTable uses generics and the get 方法 returns class 参数而不是对象 class
public V get(Object key)
所以对于新的 java 版本不需要转换...
请使用新的文学作品,技术变化真快...我们快 java 8 了,期待第 9 次
编辑:
我找到了我要找的东西:
在 java 4:
HashTable class get 方法 returns 需要对象和强制转换...
但在 java 7 例如:
HashTable class 获取方法 returns 不需要 V 类型和转换...
我正在读这个 books 并且有一个代码示例让我感到困惑,我在下面描述的片段中令人困惑的部分:
private Hashtable rates = new Hashtable();
void addRate(String from, String to, int rate) {
rates.put(new Pair(from , to), new Integer(rate)); // Pair is a value object.
}
int rate(String from, String to) {
Integer rate = (Integer) rates.get(new Pair(from, to)); // The confusing part.
return rate.intValue();
}
如果值已经是 Integer
类型,为什么作者需要在从 HashTable
获取值时进行类型转换?
根据 documentation,Hashtable
的默认用法创建一个散列映射,其中键是一个 Object
类型的对象,也是一个 [=11] 类型的值=].
虽然您放置的是整数值,但当您读回它们时,您无法保证对象是什么,因此您需要对其进行类型转换。由于您放置的内容可以转换为整数,因此转换不会失败。
不需要转换的替代方法是使用通用版本。
如果您声明哈希表并提及您将在其中存储整数,则不需要类型转换。
例如 -
Hashtable<String, Integer> numbers = new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
Integer n = numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}
编辑:
当 Java 中没有泛型时,没有注意到提到的那本书 OP 已经很老了。
所以给 OP 的建议 - 参考最新资源。
给你的东西:
您正在阅读 this:
Product Details Paperback: 240 pages Publisher: Addison-Wesley Professional; 1 edition (November 18, 2002) Language: English ISBN-10: 0321146530 ISBN-13: 978-0321146533 Product
对于那个日期,可以是 java 1.3 or maybe at the most java 1.4
所以那一定是一本非常古老的书,实际的 java HashTable uses generics and the get 方法 returns class 参数而不是对象 class
public V get(Object key)
所以对于新的 java 版本不需要转换...
请使用新的文学作品,技术变化真快...我们快 java 8 了,期待第 9 次
编辑:
我找到了我要找的东西:
在 java 4:
HashTable class get 方法 returns 需要对象和强制转换...
但在 java 7 例如:
HashTable class 获取方法 returns 不需要 V 类型和转换...