<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    littleQ

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

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      33 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks

    Velocity的比較本來很簡單,只是它在比較基本類型的時候,不僅比較值是否相等,還會比較類型是否相同。
    拿個很簡單的例子來說一下:

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


    在velocity頁面里,進行一個比較:

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

    頁面肯定會打印出"比較失敗".因為在velocity中獲取的變量aLong是long類型,而數字1234是默認為int類型的。雖然值相等,可是類型不同。
    在velocity里,好像沒有方法進行基礎類型之間的強制轉換,如果你知道的話,請回帖告訴我們。
    那現在問題擺在這里,我們想看到"類型比較成功",應該怎么做呢?

    修改java代碼,把變量aLong強制轉換成int類型:

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


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

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


    把兩邊都變成了String類型,就不會出現類型比較失敗的情況了。
    認識比較膚淺表面,還希望大家多指點一下。

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

    Feedback

    # re: velocity的類型比較[未登錄] 2008-09-28 09:33 henry1451
    思路是可以的,
    在Velocity的比較中,還有關于true,false等的比較,也會有類似的情況.  回復  更多評論
      

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

    類型比較成功

    不知道你用的 Velocity 版本是什么  回復  更多評論
      

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

    調用的是 context.put(String, Object) 方法,所以 aLong 用自動裝箱成 Long 類型。  回復  更多評論
      

    # re: velocity的類型比較 2008-09-28 11:30 littleQ
    @隔葉黃鶯
    恩,我默認用的1.4  回復  更多評論
      

    # re: velocity的類型比較 2008-09-28 11:32 littleQ
    @隔葉黃鶯
    自動裝箱我知道,但是在vm里獲取這個變量,是裝箱后的Long類型,還是會還原成基礎類型long?  回復  更多評論
      

    # 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 考慮的周詳多了。  回復  更多評論
      

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