黑马程序员技术交流社区

标题: getProperties的问题! [打印本页]

作者: 戚兴海    时间: 2014-3-4 17:05
标题: getProperties的问题!
本帖最后由 戚兴海 于 2014-3-4 17:08 编辑

Properties是HashTable的子类,用取出Map集合的方式出去里面的元素,关于泛型的使用有点小问题,代码如下
  1. import java.util.*;

  2. class getProperties
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Properties prop = System.getProperties();
  7.                
  8.                 Set<Map.Entry<Object,Object>> entrySet = prop.entrySet();
  9.                
  10.                 Iterator<Map.Entry<Object,Objec>> it = entrySet.iterator();
  11.                
  12.                 while(it.hasNext())
  13.                 {
  14.                         Map.Entry me = it.next();
  15.                         String key = (String)me.getKey();
  16.                         String value = (String)me.getValue();
  17.                         
  18.                         System.out.println(key+"::"+value);
  19.                 }
  20.                
  21.         }
  22. }
复制代码
这里的泛型部分为什么用<String,String>不行呢? 看了API文档,里面写的直接就是用Object,属性信息里面存的不都是字符串吗

作者: 戚兴海    时间: 2014-3-4 17:20
是这个集合中就没有定义泛型吗?
作者: kira    时间: 2014-3-4 17:38
因为你的getKey和getValue的返回值就是Object
  1. import java.util.Iterator;
  2. import java.util.Map;
  3. import java.util.Map.Entry;
  4. import java.util.Properties;
  5. import java.util.Set;

  6. class getProperties
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 Properties prop = System.getProperties();
  11.                
  12.                 Set<Map.Entry<Object, Object>> entrySet = prop.entrySet();
  13.                
  14. //                Iterator<Entry<Object, Object>> it = entrySet.iterator();
  15. //               
  16. //                while(it.hasNext())
  17. //                {
  18. //                        Map.Entry me = it.next();
  19. //                        String key = (String)me.getKey();
  20. //                        String value = (String)me.getValue();
  21. //                        
  22. //                        System.out.println(key+"::"+value);
  23. //                }
  24.                 for( Iterator<Map.Entry<Object, Object>> it = entrySet.iterator();it.hasNext();){
  25.                         //迭代
  26.                         Map.Entry me    =           it.next();
  27.                 String key =(String)         me.getKey();
  28.                 String val =(String)         me.getValue();
  29.                 System.out.println(key+".."+val);
  30.                
  31.                 }
  32.                
  33.         }
  34. }
复制代码

作者: 薛旻    时间: 2014-3-4 18:38
public class Properties extends Hashtable<Object,Object>
这个是Properites的API定义,它继承了HashTab,键值都是Object类型
属性列表中每个键及其对应值都是一个字符串
这个就有点像向上类型兼容了,Object是父类,那么可以String提升
但是不能直接把Object转换成String吧,
Properites的getPropety传入的是字符串,返回的是字符串,因为它的源码里进行了将Object向String类型的转换

作者: 戚兴海    时间: 2014-3-4 20:18
薛旻 发表于 2014-3-4 18:38
public class Properties extends Hashtable
这个是Properites的API定义,它继承了HashTab,键值都是Object ...

恩,只考虑输出了,没考虑到Properties成员的定义形式




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2