14.2.4.2.2. パラメーター化されたブリッジ
また、パラメーターをブリッジ実装に渡すと柔軟性が向上します。例14.26「ブリッジ実装にパラメーターを渡す」
ParameterizedBridge
インターフェースを実装し、パラメーターは @FieldBridge
アノテーションを介して渡されます。
例14.26 ブリッジ実装にパラメーターを渡す
public class PaddedIntegerBridge implements StringBridge, ParameterizedBridge { public static String PADDING_PROPERTY = "padding"; private int padding = 5; //default public void setParameterValues(Map<String,String> parameters) { String padding = parameters.get( PADDING_PROPERTY ); if (padding != null) this.padding = Integer.parseInt( padding ); } public String objectToString(Object object) { String rawInteger = ( (Integer) object ).toString(); if (rawInteger.length() > padding) throw new IllegalArgumentException( "Try to pad on a number too big" ); StringBuilder paddedInteger = new StringBuilder( ); for ( int padIndex = rawInteger.length() ; padIndex < padding ; padIndex++ ) { paddedInteger.append('0'); } return paddedInteger.append( rawInteger ).toString(); } } //property @FieldBridge(impl = PaddedIntegerBridge.class, params = @Parameter(name="padding", value="10") ) private Integer length;
ParameterizedBridge
インターフェースは、StringBridge
、TwoWayStringBridge
、FieldBridge
実装で実装できます。
すべての実装はスレッドセーフである必要がありますが、パラメーターは初期化時に設定されるため、この段階で特別な注意をする必要はありません。