【发布时间】:2013-02-27 10:56:27
【问题描述】:
我正在使用 Autobean 框架在我的 GWT 应用程序中编码/解码 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);
}
BeanFactory 是这样的:
public interface BeanFactory extends AutoBeanFactory {
public AutoBean<IPerson> person();
public AutoBean<IPerson> person(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);
}
}
如果将addId(String id) 替换为setIds(List<String> ids),它将起作用。
否则显示如下错误:
com.mycompany.jsonsample.beans.IPerson 参数化并不简单,但是 person 方法没有提供委托
是否可以不使用set 方法进行编码/解码?
【问题讨论】:
-
我认为这不可能。按照惯例,java 使用 setter 和 getter 进行反射。
-
@ChristianAchilli 有没有办法通过指定要使用该函数处理的属性来做到这一点?
-
我不知道。实际上,我不确定您为什么要这样做。从 JSON 的角度来看,Person 应该是一个 DTO。你想做什么?
-
@ChristianAchilli 我必须对一些库接口实现的实例进行编码/解码。这些接口中的大多数只有 getter 和 setter,但有些接口具有像我的示例中的
addId方法这样的方法,而不是集合 setter 方法。 -
据我所知这是不可能的。您的 bean 需要遵循命名约定。 (即
getProperty、setProperty)。