posts - 3,  comments - 0,  trackbacks - 0

               看了許多關(guān)于Comparator接口的實現(xiàn)和解決方法,感覺大多都不是太符合jdk的原意。
               Comparator接口是對Comparable接口的另一種補充。她使數(shù)據(jù)和算法分離。(在比較的時候) Comparable接口是數(shù)據(jù)和算法綁定,這本身并沒有好和壞的分別,只是不同的角度去思考同一問題。因此從分離的角度出發(fā),Comparator接口對比較的兩個對象要求的類型更加的隨意,而java 反射機制正是對這一需求的一個合理解決方案。我們在得到比較的兩個對象時,比較大小,其實就是比較他們某個屬性的大小,決定返回的是-1,0,1中的一個。而屬性的結(jié)果是通過方法返回的,所以我們可以通過反射得到他的方法集合,循環(huán)方法去得到希望的屬性。具體的希望屬性,需要用戶提供比如年齡,工資,或者其他屬性。這樣就做到了比較并且分離算法和數(shù)據(jù)。
              反射的必要條件: object1,object2,field

              代碼:public int compare( Object o1, Object o2 ) {
                  Object result1 = getValue( o1 , field)
                  Object result2 = getValue( o2 , field);
              //
            if( result1 instanceof Date  && result2 instanceof Date )
               if(orderFlag.equals("asc"))
                return ((Date)result1).compareTo((Date)result2);
               else
               {
                if(((Date)result1).compareTo((Date)result2) < 0 )
                 return 1;
                if(((Date)result1).compareTo((Date)result2) > 0)
                 return -1;
               }
              //

           if( result1 instanceof String &&  result2 instanceof String ) {
               if( result1.toString().equals( result2.toString() ) )
                return 0;
               else
                return -1;
              }
              //其他類型的比較!!!
                
              return 0
          }

          private Object getValue( Object obj , String fileName ) {
                   Method[] methods =  obj.getClass().getMethods();
                   Object value = null;
                   for(Method method: methods){
                      String name = method.getName();
                      if(name .equals("get") && name .toLowerCase().indexOf(fileName )){
                          try{
                              value  = method.invok(obj ,new Object[]{});
                          }catch(Exception e){e.printStackTrace();}
                          break;
                      }
                  }
                 return value;
              }

          posted on 2008-12-18 16:14 jk 閱讀(200) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 巴青县| 东港市| 米林县| 佛坪县| 年辖:市辖区| 西昌市| 邛崃市| 峡江县| 略阳县| 延庆县| 怀宁县| 万安县| 思茅市| 天津市| 关岭| 松原市| 东乌珠穆沁旗| 古蔺县| 武陟县| 龙山县| 福鼎市| 姜堰市| 民丰县| 华阴市| 孝感市| 大田县| 博野县| 瑞安市| 祥云县| 卓资县| 江口县| 大宁县| 紫阳县| 渑池县| 柳州市| 聂拉木县| 安达市| 方城县| 蒙山县| 德庆县| 东至县|