假设我已经定义了这些变量
RDFNode bd= soln.get(SparqlConstants.BD) ;
RDFNode alias = soln.get(SparqlConstants.ALIAS) ;
RDFNode thumbnail = soln.get(SparqlConstants.THUMBNAIL) ;
RDFNode battingSide = soln.get(SparqlConstants.BATTING_SIDE) ;
然后对于每一个,我必须在像这样的setter方法中设置一个值
if (bd!= null)
player.setBirthDate(bd.asNode().getIndexingValue().toString());
有没有办法让一个泛型方法,我传递值和方法来调用,这一般可以在Java中完成?
答案 0 :(得分:0)
您可以创建一个方法并重复使用它:
public String getIndexingValue(RDFNode node)
{
return node.asNode().getIndexingValue().toString();
}
if(bd != null)
player.setBirthDate(getIndexingValue(bd));
... and so on ...
答案 1 :(得分:0)
基于文本名称访问/调用类/方法的唯一方法是通过反射。但是,如果您的POJO符合getter / setter名称的Java bean标准,那么有些库可以隐藏反射实现,例如Apache Commons Beanutils。
答案 2 :(得分:0)
使用reflection
,您可以执行此操作:
public void set(RDFNode node, String propertyName) {
String methodName = "set" + propertyName; // <-- propertyName must be in upper CamelCase
String value = node.asNode().getIndexingValue().toString();
Method setMethod = player.getClass().getMethod(methodName, String.class);
setMethod.invoke(player, value);
}
答案 3 :(得分:0)
您可以在播放器对象上定义泛型方法,并使用反射设置值。
public void setGenericValue(methodName, param) {
this.getClass().getMethod(methodName, ...
}
此stackoverflow帖子中的示例: How do I invoke a Java method when given the method name as a string?
答案 4 :(得分:0)
您可以使用方法 -
private void setBirthDate(Player player, RDFNode obj) {
if (obj != null) {
player.setBirthDate(obj.asNode().getIndexingValue().toString());
}
}
然后将其称为 -
RDFNode bd= soln.get(SparqlConstants.BD);
setBirthDate(player, bd);