web-dev-qa-db-ja.com

速度文字列関数

私はJava Velocityを使い始めました。今度はJavaクラステンプレートを作成します。

package $app.package_namespace
public class ${app.name}Station

{
    #foreach($s_attribute in $app.station)
         $s_attribute.type $s_attribute.name,
    #end
    public $app.name Station(#foreach($s_attribute in $app.station)
                                 $s_attribute.type $s_attribute.name;
                             #end)
{
    #foreach($s_attribute in $app.station)
          $s_attribute.name=$s_attribute.name;
    #end
}
#foreach($s_attribute in $app.station)
    public ${s_attribute.type} get${s_attribute.name}()
    {
        return  get${s_attribute.name}();
    }
#end
}

問題は、s_attribute.nameの最初の文字が小文字であるということです。属性のゲッターおよびセッター関数を作成するとき。最初の文字を大文字に変更する必要があります。

誰もそれを行う方法を知っていましたか?

28
Yiming

これらのオブジェクトに対して標準のJavaメソッドを呼び出すことができます。_s_attribute.name_がString型の場合、$s_attribute.name.toUpperCase()を直接使用するか、特定の場合に$s_attribute.name.substring(0,1).toUpperCase()を使用しますおよび$s_attribute.name.substring(1).toLowerCase()

33
d-live

DisplayTool にはcapitalize()メソッドがあります:

get${display.capitalize($s_attribute.name)}()
11
serg

commons-langを使用している場合、StringUtilsクラスを使用できます。

context.put("StringUtils", org.Apache.commons.lang3.StringUtils.class);

次に、テンプレートで:

...
return  get$StringUtils.capitalize(s_attribute.name)();
...
3
naimdjon

2つのメソッドgetName()getname()を作成するだけで、_${s_attribute.name}_速度を使用するとgetname()を使用し、_${s_attribute.Name}_速度を使用するとgetName()メソッドを使用します。

速度ガイド

プロパティ検索ルール

前述のように、プロパティは多くの場合、親オブジェクトのメソッドを参照します。要求されたプロパティに対応するメソッドを特定するとき、Velocityは非常に賢い方法です。いくつかの確立された命名規則に基づいて、さまざまな代替案を試します。正確なルックアップシーケンスは、プロパティ名が大文字で始まるかどうかによって異なります。 $ customer.addressなどの小文字の名前の場合、シーケンスは

_getaddress()
getAddress()
get("address")
isAddress()
_

$ customer.Addressのような大文字のプロパティ名の場合、わずかに異なります。

_getAddress()
getaddress()
get("Address")
isAddress()
_

私が提案しているのは、バックエンドのオブジェクトでそれを処理することです。

2
Ali