所以我有一个大小的对象,如下所示:
public class Size {
private String name;
private double price;
private boolean selected;
}
然后我有一个尺寸列表:
private ArrayList<Size> sizes;
现在我想跟踪选择该列表中的哪个大小。现在我使用选择的布尔属性,并且不确定这是最好还是最干净的方式。我提到的原因是当我选择不同的大小我必须通过整个列表进行迭代并将选择更改为false,除非它是我想要的。我觉得这样做过于复杂,并且想知道是否有更好/更清洁的解决方案。
答案 0 :(得分:2)
Size
类应该是名称和价格的容器(大概)。
使用它存储选择状态违反了Single Responsibility Principle。
您可以使用以下内容。
<强> Selectable.java 强>
public class Selectable<E> {
/**
* Selects the specified element if it is possible.
*
* @param element the element tot be selected.
* @return true if selection is successful, false otherwise.
*/
public boolean select(E element);
/**
* Returns selected element if any.
*
* @return The selected element if any element is selected.
* @throws NoSuchElementException if no element is selected.
*/
public E getSelected() throws NoSuchElementException;
}
<强> SelectableArrayList.java 强>
public class SelectableArrayList<E> extends ArrayList<E> implements Selectable<E> {
private E selected; // Can also be implemented using an index.
public SelectableArrayList() {
super();
this.selected = null;
}
@Override
public boolean select(E element) {
if (super.contains(element)) {
this.selected = element;
return true;
} else {
return false;
}
}
@Override
public E getSelected() throws NoSuchElementException {
if (this.selected == null) {
throw new NoSuchElementException("No element is selected in the list.");
} else {
return this.selected;
}
}
}
希望这有帮助。
祝你好运。
答案 1 :(得分:1)
您可以保留选择项目的索引。
答案 2 :(得分:1)
为什么不保留对单独的Size
变量的引用?
像这样:
public class Size {
private String name;
private double price;
private boolean selected;
}
public class example {
private Size selectedSize;
private ArrayList<Size> sizes;
public example() {
Size s1 = new Size();
Size s2 = new Size();
Size s3 = new Size();
sizes.add(s1);
sizes.add(s2);
sizes.add(s3);
if (someCondition == true){
// Select s1
selectedSize = s1;
}
}
}
答案 3 :(得分:0)
保持对所选Size
的引用,例如在您拥有private ArrayList<Size> sizes;
的同一班级中,并在每次选择其他Size
时更新该引用。