public class JsonObject {
private HashMap<String, JsonObject> jsonObjects;
private List<JsonObject> jsonArray;
private Integer jsonNumber;
private String jsonString;
private Boolean jsonBoolean;
private Float jsonFloat;
private String original;
private VIEW view;
@SuppressWarnings("unchecked")
public JsonObject(String json) {
//... json parser to class field
}
<VIEW> void name(VIEW v) {
this.view=v;
}
// ... getter and setters
}
像使用UI基础设施一样使用Vaadin FW。 我不会这样声明:
public class Exm extends FormLayout {
public Exm() {
String json = "{some json ....}";
JsonObject<TextField> js = new JsonObject(json);
js.viewBainder(TextField::getValue,TextField::setValue)
.viewCaption(TextField::setCaption,TextField::getCaption)
.viewValueChangeEvents(TextField::addValueChangeListener);
addComponent(js.getView());
}
}
我可以不使用泛型类,只使用泛型方法吗?
如何在类中绑定VIEW和抽象方法?
PLS。举个简单的例子。
P.S。 我是java的初级学生。不要在艰难的时候思考。我! 感谢名单。
答案 0 :(得分:1)
您可以在这里找到与Vaadin中的表单绑定数据的文档:
https://vaadin.com/docs/v8/framework/datamodel/datamodel-forms.html
概念是在Vaadin中有Binder类,可以将Vaadin字段组件(实现HasValue)与POJO绑定(即具有属性的getter和setter的Java对象)Vaadin 8数据绑定最容易与Java8语法一起使用。
你问题的第二部分是如何将JSON反序列化为POJO并返回字符串,根据你的问题,我没有掌握你使用的库,有很多,而且细节根据你使用的内容而有所不同。你使用什么,你应该使用getName()和setName(..)方法构建java对象(name现在是JSON中的属性之一)。
How to convert String to JSONObject in Java
通常我们喜欢调用JSON DTO对象(=数据传输对象)的反序列化版本,因为它仅在应用程序内部使用。所以,如果这被称为例如PersonDTO
TextField nameField = new TextField();
// Shorthand for cases without extra configuration
binder.bind(nameField, PersonDTO::getName, PersonDTO::setName);