我有一个名为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来设置值。
答案 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".
这是因为a
和s
指向同一个对象。
您的构造函数
可读代码的关键要素之一是一致性。如果你以某种方式做某事,如果它不影响程序的功能,总是这样做。您不遵循该原则的一个例子是:
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);
我真的不知道这段代码的用途,或者至少从你提供的代码中看不出来。