Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 不带setter方法的GWT Autobean_Json_Gwt_Autobean - Fatal编程技术网

Json 不带setter方法的GWT Autobean

Json 不带setter方法的GWT Autobean,json,gwt,autobean,Json,Gwt,Autobean,我在GWT应用程序中使用Autobean框架对JSON进行编码/解码。它适用于具有getter和setter的接口的情况。但是有没有其他方法可以做到这一点,而不用指定setThisCollectionProperty而使用addToThisCollectionProperty方法 例如,我有一个界面IPerson,如下所示: public interface IPerson { public String getName(); public void setName(

我在GWT应用程序中使用Autobean框架对JSON进行编码/解码。它适用于具有getter和setter的接口的情况。但是有没有其他方法可以做到这一点,而不用指定
setThisCollectionProperty
而使用
addToThisCollectionProperty
方法

例如,我有一个界面
IPerson
,如下所示:

public interface IPerson {
       public String getName();
       public void setName(String name);

       public int getAge();
       public void setAge(int age);

       public List<String> getIds();
       public void addId(String id);
}
public interface BeanFactory extends AutoBeanFactory {

    public AutoBean<IPerson> person();

    public AutoBean<IPerson> person(IPerson person);


}
公共接口IPerson{
公共字符串getName();
public void setName(字符串名称);
public int getAge();
公共空间设置(整数);
公共列表getid();
公共void addId(字符串id);
}
BeanFactory是这样的:

public interface IPerson {
       public String getName();
       public void setName(String name);

       public int getAge();
       public void setAge(int age);

       public List<String> getIds();
       public void addId(String id);
}
public interface BeanFactory extends AutoBeanFactory {

    public AutoBean<IPerson> person();

    public AutoBean<IPerson> person(IPerson person);


}
公共接口BeanFactory扩展了AutoBeanFactory{
公众人物();
公共汽车人(IPerson person);
}
以及实现IPerson的Person类

public class Person implements IPerson {
       private String name;
       private List<String> ids;
       ...

       public List<String> getIds() {
              return ids;
       }

       public void addId(String id) {
              ...
              ids.add(id);
       }
}
公共类Person实现IPerson{
私有字符串名称;
私有列表ID;
...
公共列表getIds(){
返回ID;
}
公共void addId(字符串id){
...
添加(id);
}
}
如果将
addId(字符串id)
替换为
setid(列表id)
,则此功能有效。 否则,将显示以下错误:

com.mycompany.jsonsample.beans.IPerson参数化并不简单,但是person方法不提供委托


是否可以不使用
set
方法进行编码/解码?

AutoBean管理所有的getter和setter,并且只管理getter和setter。对于任何其他方法,都必须使用


因此,使用一个类别,您可以将
addId(…)
实现为
getIds().add(…)
,或者如果
AutoBean

我认为不可能的话,可以直接调用
addIds
。按照惯例,java使用setter和getter进行反射。@ChristianAchilli没有办法通过指定该函数要处理的属性来实现这一点吗?我不知道。实际上我不知道你为什么要这样做。从JSON的角度来看,Person应该是DTO。你想做什么?@ChristianAchilli我必须对一些库接口实现的实例进行编码/解码。大多数接口只有getter和setter,但在我的示例中,有些接口有像
addId
方法这样的方法,而不是集合setter方法。据我所知,这是不可能的。您的bean需要遵循命名约定。(即
getProperty
setProperty
)。