对字符串形式给出的条件求值



我有一个由三部分组成的字符串:fieldName, operatorvalue

假设参数有以下值:

fieldName: firstName
operator: equals
value: Nikola

我希望能够在Java反射的帮助下评估firstName equals Nikola作为条件。这可能吗?if(obj.getFirstName().equals(value))

编辑 ( Xenteros ):
根据评论中的讨论,我决定在问题中添加解释,因为MCVE应该在问题本身中:

问题描述:
有一个类有多个字段,它们都包含字符串。有一个解决方案的请求,以获得字段的名称字段值,并与另一个String比较。
有多个操作符可用。例如:<, <=, >=等,但也有equals可用,不幸的是之前添加了一个例子。如果用户将"equals"传递给该方法,则应该调用equals

输入例子:
User u,使得u.firstName.equals("John"))
"firstName",
"John",
"<="

预期输出:

true

你问的是反射:

让我们假设你有一个名为obj的对象。

Field field = obj.getClass().getField(fieldName);
Method method = field.getType().getMethod(operator, Object.class); //in case you mean method
if (method.invoke(field.get(), value) {}

记住用try-catch包围它,因为有很多可能抛出的异常。

根据你对问题的更新,我建议如下:

boolean check(Object obj, String fieldName, String operator, String value) throws IllegalArgumentException, someOtherExceptions {
    Field field = obj.getClass().getField(fieldName);
    if (operator.equals("equals") {
        return field.get().equals(value);
    }
    if (operator.equals("<=")) {
        return field.get().compareTo(value) <=0;
    }
    if (operator.equals("<")) {
        return field.get().compareTo(value) < 0;
    //other operators impl.
    //at the end:
    throw new IllegalArgumentException("Unknown operator");
}

代替Object obj,你应该把类包含所有字段'fieldName'可能引用。

相关内容

  • 没有找到相关文章