7.4.4.2.2. 参数网桥
参数也可以传递到网桥实施,使其更灵活。下例实施参数化Bridge 接口和参数通过 @FieldBridge 注释传递:
示例:将参数传递给网桥实施
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 接口可通过TwoWayString 实施来实现。
Bridge 和 BridgeFieldBridge 实现 String
所有实施都必须是线程安全,但参数在初始化过程中设置,此阶段不需要特别注意。