java arraylist更改值,因为我使用实例类为其添加值

时间:2013-05-10 18:50:45

标签: java arraylist

我有一个名为Review的实例类,它接受String,String,int,String,boolean。

每次用户输入所有5个值的值时,它都会添加到main中的arrayList。 我的问题在于,当用户更新值时,它也会更改arraylist中的值,最后,arraylist中的所有Review都会变成相同的。我在Review类中没有任何静态内容。我该如何解决这个问题?

public class Review implements Comparable<Review>{
  private String reviewer;
  private String restaurant;
  private int rating;
  private String comment;
  private boolean recommended;
  public Review( String revName, String restName, int rating, String comment, boolean recommended) {
    reviewer = revName;
    restaurant = restName;
    this.rating = rating;
    this.comment = comment;
    this.recommended = recommended; 
  }

这是基本类w /构造函数,它们都有自己的getter&amp;设定器。

private ArrayList<Review> reviews = new ArrayList<Review>();

Review review = new Review(revName, restName, rating, comment, recommended);

public void setReviews(Review review){
  reviews.add(review);
}
public ArrayList<Review> getReviews(){
    return reviews;
}

这是另一个导入和导出的类。(从现在开始我称之为“读者”类)

在主要我只是使用

    ArrayList<Review> reviews = reader.getReviews();

每次有更新时将它们设置为彼此

    reader.setReviews(review);

用户在所有5个输入之后使用。 user使用来自Review类的各个变量的setter来设置值。

1 个答案:

答案 0 :(得分:0)

您的问题

当您声明:

Object o = new Object();

您使用的值是该对象的指针。不是对象本身。因此,当您打算向ArrayList添加多个对象时,您不会自己添加对象。您只需将pointers添加到这些对象即可。因此,您需要ArrayList中每个项目的新对象。为什么呢?

SomeClass s = new SomeClass();
SomeClass a = s;

a.setName("Hello"); // Sets the object's name value that a points to.
s.getName(); // Will return "Hello".

这是因为as 指向同一个对象

其他东西

您的构造函数

可读代码的关键要素之一是一致性。如果你以某种方式做某事,如果它不影响程序的功能,总是这样做。您不遵循该原则的一个例子是:

reviewer = revName;
restaurant = restName;

构造函数的其余部分如下所示:

this.rating = rating;
this.comment = comment;
this.recommended = recommended; 

后一部分是构造函数更常用的代码,我建议更改第一部分,以使其适合模式,即:

this.reviewer = reviewer;
this.restaurant = restaurant;

对象声明

Review review = new Review(revName, restName, rating, comment, recommended);

我真的不知道这段代码的用途,或者至少从你提供的代码中看不出来。