Açıklaması şöyle
Template processing is built upon the newly added nested functional interface java.lang.StringTemplate.Processor:How the processing works is that the String literal containing the expression is converted to a StringTemplate and given to a Processor.If we want to create a JSONObject, we need to interpolate the String literal first, and then create the new instance of the desired return type. Using the static helper Processor.of makes this quite easy:
Kod şöyle
@FunctionalInterface
public interface Processor<R, E extends Throwable> {
R process(StringTemplate stringTemplate) throws E;
static <T> Processor<T, RuntimeException> of(
Function<? super StringTemplate, ? extends T> process) {
return process::apply;
}
// ...
}of metodu
Örnek
Açıklaması şöyle
How the processing works is that the String literal containing the expression is converted to a StringTemplate and given to a Processor.If we want to create a JSONObject, we need to interpolate the String literal first, and then create the new instance of the desired return type. Using the static helper Processor.of makes this quite easy:
Şöyle yaparız Önce bir Processor yaratıyoruz. Sonra StringTemplate nesnesi Processor'a geçiliyor.
/// CREATE NEW TEMPLATE PROCESSOR
var JSON = StringTemplate.Processor.of(
(StringTemplate template) -> new JSONObject(template.interpolate())
);
// USE IT LIKE BEFORE
JSONObject json = JSON."""
{
"user": "\{
// We only want to use the firstname
this.user.firstname()
}",
"temperatureCelsius: \{tempC}
}
""";Kod şöyle
StringTemplate.Processor<JSONObject, JSONException> JSON = template -> {
String quote = "\"";
List<Object> newValues = new ArrayList<>();
for (Object value : template.values()) {
if (value instanceof String str) {
// SANITIZE STRINGS
// the many backslashes look weird, but it's the correct regex
str = str.replaceAll(quote, "\\\\\"");
newValues.add(quote + str + quote);
}
else if (value instanceof Number || value instanceof Boolean) {
newValues.add(value);
}
// TODO: support more types
else {
throw new JSONException("Invalid value type");
}
}
var json = StringTemplate.interpolate(template.fragments(), newValues);
return new JSONObject(json);
};
Hiç yorum yok:
Yorum Gönder