public static DesiredRateReadWriteExpression<VString, String> vStringOf(DesiredRateReadWriteExpression<? extends VType, ? extends Object> expression,
ValueFormat valueFormat) {
LatestValueCollector<VType> forward = new LatestValueCollector<>();
DesiredRateExpression<VString> readExp = new DesiredRateExpressionImpl<>(expression,
new VStringOfFunction(expression.getFunction(), valueFormat, forward)
, expression.getName());
@SuppressWarnings("unchecked")
WriteFunction<Object> writeFunction = (WriteFunction<Object>) (WriteFunction) expression.getWriteFunction();
WriteExpression<String> writeExp = new WriteExpressionImpl<>(expression,
new VStringOfWriteFunction(forward, valueFormat, writeFunction), expression.getName());
return new DesiredRateReadWriteExpressionImpl<>(readExp, writeExp);
}