繁体   English   中英

如何在 GWT 中动态访问 Java 对象的属性?

[英]How can I dynamically access property of Java object in GWT?

使用 GWT 我有一个 Java 类:

public class Pojo {
  private String name;
  public String getName() { return name; }
  public void setName(String name) { this.name = name; }
}

上述类在客户端和服务器端代码之间共享。

从客户端代码我想动态访问该属性。 也就是说,我想写一个具有以下签名的方法:

public String getProperty(Object o, String propertyName)

这样下面的代码就可以工作了:

Pojo pojo = new Pojo();
pojo.setName("Joe");
getProperty(pojo, "name");    // this should return "Joe"

Java反射显然是出来的。 我尝试了以下 JSNI 方法:

public static native String getProperty(Object o, String name) /*-{
  return o[name];
}-*/;

但这不起作用。

也不能使用从 JavaScript 访问 Java 对象的特殊语法,因为我希望它是动态的。

关于我如何做到这一点的任何想法?

为了完整起见,我还希望能够动态设置属性。

编辑:blwy10 的回答是一个很好的提示,让我使用“gwt 反射”而不是“动态属性访问”之类的术语进行搜索。 这让我想到了 gwt-ent ,它有一个非常优雅的反射解决方案。 我将尝试这个,因为它不需要单独的代码生成步骤。

这并不能直接回答您的问题,但是您尝试过吗?

http://gwtreflection.sourceforge.net/

希望这可以帮助!

您可以使用 GWT 的AutoBean 框架 这是一个 2 分钟的快速和肮脏的例子:

public interface Person {    
    public String getName();    
    public void setName(String name);    
}


public String getPropertyValue(Person p, String propertyName){
    return AutoBeanUtils.getAllProperties(AutoBeanUtils.getAutoBean(p)).get(propertyName);
}

检查此解决方案:

http://jpereira.eu/2011/01/30/wheres-my-java-reflection/

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM