我有一个由三部分组成的字符串:fieldName
, operator
和value
假设参数有以下值:
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'可能引用。