- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在创建一个包含许多不同 NetworkMessages
的库,这些消息通常采用 JSON 格式,现在需要一个相应的 Java 模型。
问题在于,这些消息在 JSON 中可以轻松包含大约 100 个字段。其中一些是强制 (30%),一些是可选 (70%)。
所以我最关心的是如何最小化相应模型中的样板代码。因为,正如我所说,这些 POJO 可以轻松拥有大约 100 个字段、许多 getter,以及构造函数中的许多字段。
我将给出一个小消息
的示例,但请记住,消息通常要大得多(更多字段)。
MessageA.java
@JsonInclude(Include.NON_EMPTY)
public class MessageA extends NetworkMessage {
private final String a;
private final String b;
private final String c;
private final String d;
private final String e;
private final String f;
private final String g;
private final String h;
private final String i;
private final String j;
private final String k;
@JsonCreator
private MessageA(
// required fields
@JsonProperty(value = "a", required = true) String a,
@JsonProperty(value = "b", required = true) String b,
@JsonProperty(value = "c", required = true) String c,
@JsonProperty(value = "d", required = true) String d,
@JsonProperty(value = "e", required = true) String e,
@JsonProperty(value = "f", required = true) String f,
// optional fields
@JsonProperty(value = "g") String g,
@JsonProperty(value = "h") String h,
@JsonProperty(value = "i") String i,
@JsonProperty(value = "j") String j,
@JsonProperty(value = "k") String k) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.e = e;
this.f = f;
this.g = g;
this.h = h;
this.i = i;
this.j = j;
this.k = k;
}
public Optional<String> getG() {
return Optional.ofNullable(g);
}
public Optional<String> getH() {
return Optional.ofNullable(h);
}
public Optional<String> getI() {
return Optional.ofNullable(i);
}
public Optional<MessageType> getJ() {
return Optional.ofNullable(j);
}
public Optional<String> getK() {
return Optional.ofNullable(k);
}
public String getA() {
return a;
}
public String getB() {
return b;
}
public String getC() {
return c;
}
public String getD() {
return d;
}
public String getE() {
return e;
}
public String getF() {
return f;
}
}
现在,我尝试使用 Google 的 AutoValue
库来解决其中的一些问题,代码看起来好一些,但仍然调用了具有许多字段的构造函数。
MessageA.java
@AutoValue
@JsonInclude(Include.NON_EMPTY)
public abstract class MessageA extends NetworkMessage {
// required fields
@Nonnull public abstract String getFieldA();
@Nonnull public abstract String getFieldB();
@Nonnull public abstract String getFieldC();
@Nonnull public abstract String getFieldD();
@Nonnull public abstract String getFieldE();
@Nonnull public abstract String getFieldF();
// optional fields
@Nullable public abstract String getFieldG();
@Nullable public abstract String getFieldH();
@Nullable public abstract String getFieldI();
@Nullable public abstract String getFieldJ();
@Nullable public abstract String getFieldK();
@JsonCreator
private static MessageA create(
// required fields
@JsonProperty(value = "a", required = true) String a,
@JsonProperty(value = "b", required = true) String b,
@JsonProperty(value = "c", required = true) String c,
@JsonProperty(value = "d", required = true) String d,
@JsonProperty(value = "e", required = true) String e,
@JsonProperty(value = "f", required = true) String f,
// optional fields
@JsonProperty(value = "g") String g,
@JsonProperty(value = "h") String h,
@JsonProperty(value = "i") String i,
@JsonProperty(value = "j") String j,
@JsonProperty(value = "k") String k) {
return new AutoValue_MessageA(
a, b, c, d, e, f, g, h, I, j, k);
}
}
现在好多了,但是有一个问题,我不能有可选返回类型,所以我的代码中可能会 float 空值,并且应该在其他地方执行大量空检查。
您的建议是什么?采取哪种方式?
最佳答案
如果您确实想要/需要将这些 Json 消息表示为 POJO,那么您至少可以通过仅定义所需的字段并使用 Lombok 来绕过所有样板 getter/setter/Ctor 噪音。用于生成 getter/setter/Ctor。通过使用 @Data
@Data 注释该类您将免费获得 getters/setter/ctor,而无需看到涉及的样板文件。
@Data
public class MessageA extends NetworkMessage {
private final String a;
将导致一个看起来像这样(以及更多)的类
@Data
public class MessageA extends NetworkMessage {
private final String a;
public MessageA(String a){
this.a=a;
}
public String getA(){
return this.a;
}
/*
*No setter since the field is private
*public void setA(String a){
* this.a=a;
*}
*public boolean equals(Object o){...}
*public String toString(){...}
*/
我一直使用 lombok 来避免一些必要的困惑。
但也许您最好完全利用这些数据类。如此巨大的消息看起来并不代表一个概念,而是代表几个嵌套的概念。否则,只需将 JSON 存储为 JSONObject 并提供直接从 JSON 获取值的 getter(这样您将可以更轻松地配置/验证复杂条件)
关于java - 避免使用代表 JSON 的 POJO 的样板代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790414/
我正在尝试在我的 UITableView 上调用 reloadData。我在没有界面生成器的情况下制作我的应用程序。 此代码适用于 Interface Builder,但似乎没有。 当我将我的代码与我
有人可以解释 UIAlertView 的委托(delegate)是如何工作的吗?它是自动调用还是我必须调用它?例如: - (void)alertView:(UIAlertView *)alertVie
编辑:好吧,根据其他人的建议,我创建了一个最小的示例......并且它有效,因此我将在未来与任何人分享它。这是工作代码: #include #include using namespace std
unicode 是 ,它被用在 XML 文档中。 最佳答案 查看图表:unicodelookup.com 换行符。 关于html - unicode字符是什么 代表?,我们在Stack Overflo
我有一个应用程序,可以以编程方式在配置的 Facebook 页面上发帖。我的应用程序显然已批准管理页面和发布页面权限,并且我正在使用页面访问 token 从现在开始一切正常,但最近当我在页面提要上发布
代表 NCAA 男子篮球分组的最佳数据库模式是什么?如果您不熟悉,请点击以下链接:http://www.cbssports.com/collegebasketball/mayhem/brackets/
所以我一直在阅读这个关于如何使用 Frida 的教程:https://www.frida.re/docs/functions/我遇到过以下情况: $ ./client 127.0.0.1 connec
委托(delegate)函数返回之前是否需要调用replyHandler?我需要进行几次 Web 服务 API 调用才能回复,以下实现正确吗? func session(_ session: WCSe
下面提到的是我的 textField 委托(delegate)方法,我正在使用 IQKeyBoardSwift 作为智能键盘。我尝试移除我的键盘,但我仍然没有收到任何关于接受“开始触摸”的方法的调用
我有一个表格 View ,其中几乎没有用于数据输入的文本字段和弹出窗口。我想将其中一些表示为强制性的。我不知道如何讨厌星号。任何帮助将不胜感激。 最佳答案 我认为你可以使用自定义 UITableVie
例如,我知道如何使用 numpy 对数组进行切片 v[1, :, :] 现在我想要一个函数将切片 (1,1,None) 作为输入并返回 v[1,:,:] 问题是我不知道如何表示省略号 最佳答案 您可以
修订... 应用程序的关键是与数据库服务器通信。服务器对应用程序的响应都是 XML 格式的。有几个屏幕。例如,屏幕 1 列出了用户的信息,屏幕 2 列出了用户过去的交易,允许新交易,等等。 这是我的
我想知道映射/表示内存的最佳方式是什么。我的意思是,例如,如何描述一个结构及其所有字段都被序列化。 我正在创建一个 RPC 库,它将使用 dwarf 调试数据创建客户端和服务器,因此我需要创建一个函数
如果我有一个实现了两个协议(protocol)的 View Controller : @interface CustomerOperationsViewController : UIViewContr
在 Objective-C 中我可以做这样的事情: @property (nonatomic, weak) id someObject; 如何在swift中做到这一点?我试过这个: let someO
我成功地使用了相当棒的 connection:didReceiveAuthenticationChallenge: NSURLConnectionDelegate 委托(delegate)方法。很酷。
我正在寻找原始数据类型的 @NonNull 等效 Java 注释。我知道原始数据不能为 null,但我找不到替代方法。 我想要实现的在逻辑上等同于: int mPageNumber; public v
我正在学习 Git,如果我能描述代表 Git 存储库的数学结构,那就太好了。例如:它是一个有向无环图;它的节点代表提交;它的节点有代表分支等的标签(每个节点最多一个标签,没有标签使用两次)。(我知道这
我看过很多与委托(delegate)相关的帖子,我想知道引用它们的正确方法。假设我有一个声明如下的对象: @interface MyViewController : UITableViewContro
我有这个类: public class Order { int OrderId {get; set;} string CustomerName {get; set;} } 我也声明下面的变
我是一名优秀的程序员,十分优秀!