gpt4 book ai didi

java - 如何处理有时不使用某个特定变量的类

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:59 24 4
gpt4 key购买 nike

初学者问题在这里。我正在编写一个 Java 程序,该程序在 Internet 上查询公共(public) API 以检索论坛上讨论的详细信息。数据以 JSON 形式返回,我将其解析为 Java 对象以在我的程序中使用。

讨论通常包含五个属性,即五个公共(public)变量。但针对有限数量的特定搜索类型,不返回评论数量。

是否有处理这种情况的“最佳”(就面向对象编程而言)方法?下面是我的第一次尝试,其中我简单地编写了两个构造函数,一个为 numberOfComments 赋值,一个不赋值。

这似乎不是一个很好的解决方案 - 如果另一个类创建 DiscussionDetails 对象,使用不填充 numberOfComments 的构造函数,但随后尝试使用 numberOfComments 字段,会发生什么情况?

我想也许它应该被分成两个类,其中 DiscussionDetails 没有 numberOfComments 字段,而 DiscussionDetailsS​​pecialised 是一个带有额外 numberOfComments 字段的子类。为了一个领域,这对我来说有点矫枉过正。

或者可能有一种约定,这样的变量初始化为特定值,如“false”或“-1”或其他值?

对于这种情况,有经验的程序员会使用其他更好的方法吗?

我知道这个例子很简单,但我用它来尽可能简单地说明我的问题。

/**
* Wrapper for a set of JSON data returned from an API
*/
public class DiscussionDetails
{
public String discussionID;
public String discussionName;
public String discussionURL;
public String submittedDate;
public String numberOfComments;

/**
* Constructor that populates all fields
*/
public DiscussionDetails(String discussionID, String discussionName, String discussionURL, String submittedDate, String numberOfComments)
{
this.discussionID = discussionID;
this.discussionName = discussionName;
this.discussionURL = discussionURL;
this.submittedDate = submittedDate;
this.numberOfComments = numberOfComments;
}

/**
* Constructor method to use when the number of comments is unknown, which happens in certain specific cases
*/
public DiscussionDetails(String discussionID, String discussionName, String discussionURL, String submittedDate)
{
this.discussionID = discussionID;
this.discussionName = discussionName;
this.discussionURL = discussionURL;
this.submittedDate = submittedDate;
}
}

最佳答案

这在传统上是用“特殊”值(显然没有意义的值,例如:-1 表示计数)或 null(在某种意义上是最特别的值)。

处理这个问题的“最佳”方法是,恕我直言,java.util.Optional:客户端在希望使用值时必须检查值是否存在,Optional 明确了这一点,避免了客户端忘记检查的常见错误来源。

关于java - 如何处理有时不使用某个特定变量的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com