JExpression добавить строковое значение в качестве свойства в операторе if
Я работаю над плагином для создания операторов toString в моем проекте, используя CodeModel.
Полученный код должен выглядеть так:
if (variable == null) {
out.append(" " + "variable = null").append("\n");
}
(в приведенном выше коде простой StringBuilder)
Я хочу использовать CodeModel для автоматической генерации новых строк и вкладок в операторах if, и до сих пор получил этот вывод:
if ("variable" == null) {
out.append(" " + "variable = null").append("\n");
}
Проблема заключается в кавычках, окружающих переменную, которые присутствуют при назначении литерального значения JExpression для значения переменной. Текущая реализация выглядит так:
private void printComplexObject(final JMethod toStringMethod, FieldOutline fo) {
String property = fo.getPropertyInfo().getName(false);
property = property.replace("\"", "");
JType type = fo.getRawType();
JBlock block = toStringMethod.body();
JConditional nullCheck = block._if(JExpr.lit(property).eq(JExpr._null())); ...}
Кто-нибудь знает, как это можно сделать с помощью JExpression или чего-то еще из CodeModel? Единственная альтернатива, которую я имею до сих пор, это сделать это с помощью DirectStatement следующим образом:
toStringMethod.body().directStatement("if (" + property + " == null) { out.append ...}");
1 ответ
Решение состоит в том, чтобы заменить JConditional nullCheck следующим:
JConditional nullCheck = block._if(JExpr.direct(property).eq(JExpr._null()));
JExpr.direct (свойство) вместо.lit приводит к тому, что переменная вместо "variable" используется в этом JConditional.