【问题标题】:How to create a better object如何创建更好的对象
【发布时间】:2019-04-12 06:48:33
【问题描述】:

与我之前的线程相关,我想打印这样的输出:

bookId = "1234" (String)
bookName = "Machine Learning" (String)
price = $20 (int)
ratings = (array of object)
rater = a, score = 5
rater = b, score = 3

但这一次,我尝试使用OOP方式。

首先,我创建了一个名为ProductView 的 POJO 类,该类将如下所示:

public class ProductView {

    // field
    private String bookId;
    private String bookName;
    private int price;
    private List<Ratings> ratings;

    // a constructor i tried to make
    public ProductView(String bookId, String bookName, int price, List<Ratings> ratings) {
    this.bookId = bookId;
    this.bookName = bookName;
    this.price = price;
    this.ratings = ratings;
    }

    public String getBookId() {
        return bookId;
    }

    public void setBookId(String bookId) {
        this.itemId = itemId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
    this.bookName = bookName;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public Ratings getRatings() {
        return ratings;
    }

    public void setRatings(Ratings ratings) {
        this.ratings = ratings;
    }
}

之后,我创建了一个名为Ratings 的类,其中包含以下字段:

public class Ratings {

    private String rater;
    private int score;

    public Ratings(String rater, int score) {
        this.rater = rater;
        this.score = score;
    }
}

最后,我创建了一个名为 Main 的主类:

public class Main {

    public static void main(String[] args) {
    }
}

在主类中,我想创建一个 ProductView 类的实例并赋予它一些价值。

但我不知道如何在构造函数中使用列表对象参数。

谁能给我一些见解?

【问题讨论】:

  • 这实际上是我的问题,我如何在我的对象中定义一个值,因为我的构造函数有一个列表
  • 首先,您的评级 getter 和 setter 将不起作用,因为这些方法处理 Ratings,但您的字段实际上是 List&lt;Ratings&gt;。其次,我认为Ratings 类应该称为Rating,因为每个对象只有一个评分值。解决这些问题后,使用List&lt;Rating&gt; ratings = java.util.Arrays.asList(new Rating(...), new Rating(...), ...); 创建评分列表
  • 谢谢,真的很有帮助。

标签: java arrays list oop


【解决方案1】:

第一:

List是一个接口,你应该传递一个list的实现,比如ArrayList或类似的

秒:

您在ProductView -> SetBookId 中有编译错误,在this.itemId 中您没有itemId 作为成员或构造函数参数

此外,在获取/设置评级时,您需要传递和返回评级列表。

命名: Ratings 实际上只是一个 Rating,您可以创建一个新的 List 类,或者直接使用 Ratings 但更改名称

现在回答您的问题: 您可以先用对象初始化列表,然后将其发送给构造函数 如:

    List<Ratings> ratings = new ArrayList<>();
    ratings.add(new Ratings("rater",5));
    ratings.add(new Ratings("rater2",6));

    ProductView productView = new ProductView("bookId","bookName",1,ratings); 

或者,只是在构造函数中初始化ArrayList,第一种方式更可取:

    ProductView productView1 = new ProductView("bookId","bookName",1,
            new ArrayList<Ratings>(Arrays.asList(new Ratings("rater",5), new Ratings("rater2",6))
    ));

希望这能回答你的问题

与 cmets 中提到的 DodgyCodeException 相同。

【讨论】:

  • 是的,这就是我想要的。感谢您的帮助。
  • @fajri,如果这有帮助,请在问题中添加排名。
  • 不好意思,如何在问题中添加排名?
猜你喜欢
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多