所以我有一个由三部分组成的字符串: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
。
预期产出:
$scope.generateExcelSheet=function(){
var uri = 'data:application/vnd.ms-excel;base64,'
, template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
, base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
var table='exportable';
var name='Report';
if (!table.nodeType) table = document.getElementById(table)
var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
window.location.href = uri + base64(format(template, ctx));
}
答案 0 :(得分:1)
你问的是反思:
假设您有一个名为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'可能引用的所有字段的类放在一起。