littleQ

          終于明白曾經(jīng)他們失落的目光,當(dāng)年的你們是否一樣;間有懈怠或有頹放,難知多久方能補(bǔ)上;今起,不再彷徨!

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            33 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks

          Velocity的比較本來(lái)很簡(jiǎn)單,只是它在比較基本類型的時(shí)候,不僅比較值是否相等,還會(huì)比較類型是否相同。
          拿個(gè)很簡(jiǎn)單的例子來(lái)說(shuō)一下:

          VelocityContext context = new VelocityContext();
          long aLong = 1234L
          ;
          context.put(
          "aLong", aLong);


          在velocity頁(yè)面里,進(jìn)行一個(gè)比較:

          #if($!aLong==1234)
              類型比較成功
          #else
              比較失敗
          #end

          頁(yè)面肯定會(huì)打印出"比較失敗".因?yàn)樵趘elocity中獲取的變量aLong是long類型,而數(shù)字1234是默認(rèn)為int類型的。雖然值相等,可是類型不同。
          在velocity里,好像沒(méi)有方法進(jìn)行基礎(chǔ)類型之間的強(qiáng)制轉(zhuǎn)換,如果你知道的話,請(qǐng)回帖告訴我們。
          那現(xiàn)在問(wèn)題擺在這里,我們想看到"類型比較成功",應(yīng)該怎么做呢?

          修改java代碼,把變量aLong強(qiáng)制轉(zhuǎn)換成int類型:

          context.put("aLong",(int)aLong).


          不過(guò)我不是很贊成這種做法,從long強(qiáng)制轉(zhuǎn)換成int類型,很容易造成精度丟失。
          還有一種比較直接的方法,不修改java代碼,直接修改vm文件:

          #if("$!aLong"=="1234")
              類型比較成功
          #else
              比較失敗
          #end


          把兩邊都變成了String類型,就不會(huì)出現(xiàn)類型比較失敗的情況了。
          認(rèn)識(shí)比較膚淺表面,還希望大家多指點(diǎn)一下。

          posted on 2008-09-27 10:08 littleQ 閱讀(4104) 評(píng)論(7)  編輯  收藏 所屬分類: java

          Feedback

          # re: velocity的類型比較[未登錄](méi) 2008-09-28 09:33 henry1451
          思路是可以的,
          在Velocity的比較中,還有關(guān)于true,false等的比較,也會(huì)有類似的情況.  回復(fù)  更多評(píng)論
            

          # re: velocity的類型比較 2008-09-28 10:28 隔葉黃鶯
          我用的是 Velocity 1.5,執(zhí)行的結(jié)果是

          類型比較成功

          不知道你用的 Velocity 版本是什么  回復(fù)  更多評(píng)論
            

          # re: velocity的類型比較 2008-09-28 10:37 隔葉黃鶯
          long aLong = 1234L;
          context.put("aLong", aLong);

          調(diào)用的是 context.put(String, Object) 方法,所以 aLong 用自動(dòng)裝箱成 Long 類型。  回復(fù)  更多評(píng)論
            

          # re: velocity的類型比較 2008-09-28 11:30 littleQ
          @隔葉黃鶯
          恩,我默認(rèn)用的1.4  回復(fù)  更多評(píng)論
            

          # re: velocity的類型比較 2008-09-28 11:32 littleQ
          @隔葉黃鶯
          自動(dòng)裝箱我知道,但是在vm里獲取這個(gè)變量,是裝箱后的Long類型,還是會(huì)還原成基礎(chǔ)類型long?  回復(fù)  更多評(píng)論
            

          # re: velocity的類型比較 2008-09-28 16:41 隔葉黃鶯
          解決辦法有:
          換成 1.5 的 Velocity
          1.4 的 Velocity 中的
          if (left.getClass().equals( right.getClass() ) )
          {
          return left.equals( right );
          }
          1.5 Velocity 的 ASTNotNode.evaluate(InternalContextAdapter context) 可比 1.4 考慮的周詳多了。  回復(fù)  更多評(píng)論
            

          # re: velocity的類型比較 2008-09-28 17:03 littleQ
          @隔葉黃鶯
          恩~謝謝隔葉黃鶯~  回復(fù)  更多評(píng)論