public class Facture {
private Client client = new Client();;
private float Paiement;
private float soustotal;
private float tps;
private float tvq;
private float ttc;
private List<LigneFacture> lignesFac = new ArrayList<LigneFacture>();
public Facture(){
this.Paiement=0;
this.soustotal=0;
this.tps=0;
this.tvq=0;
this.ttc=0;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public float getPaiement() {
return Paiement;
}
public void setPaiement(float Paiement) {
this.Paiement = Paiement;
}
public float getSoustotal() {
return soustotal;
}
public void setSoustotal(float soustotal) {
this.soustotal = soustotal;
}
public float getTps() {
return tps;
}
public void setTps(float tps) {
this.tps = tps;
}
public float getTvq() {
return tvq;
}
public void setTvq(float tvq) {
this.tvq = tvq;
}
public float getTtc() {
return ttc;
}
public void setTtc(float ttc) {
this.ttc = ttc;
}
public List<LigneFacture> getLignesFac() {
return lignesFac;
}
public void addLignesFacture(LigneFacture ligneFac){
this.lignesFac.add(ligneFac);
Iterator iter_lignesFact = lignesFac.iterator();
while(iter_lignesFact.hasNext()){
LigneFacture lignefac_cur = iter_lignesFact.next();
}
}
}
嗨我有这个类,问题出在最后一个方法中,Java告诉我iter_lignesFact返回一个Object值而不是LigneFacture值,因此他希望我把它转换为LigneFacture,为什么呢?我在LigneFacture列表中定义了我的迭代器。
答案 0 :(得分:13)
你在这里使用了原始类型:
Iterator iter_lignesFact = lignesFac.iterator();
您想使用通用表单:
Iterator<LigneFacture> iter_lignesFact = lignesFac.iterator();
答案 1 :(得分:1)
您使用了原始类型,但是通过使用foreach循环可以避免完全输入和大量代码的麻烦:
for (LigneFacture lignefac_cur : lignesFac) {
// do something with lignefac_cur
}
如果迭代,使用foreach循环是一种非常整洁的方法。请注意,尽管使用这种循环进行整个迭代,但您可能无法更改集合。具体而言,没有相当于iterator.remove()
的可用内容。但是,如果在循环中不需要这种操作,则foreach是首选语法。
答案 2 :(得分:0)
并且,您根本不想使用Iterator
。我们这个功能在做什么?
public void addLignesFacture(LigneFacture ligneFac){
this.lignesFac.add(ligneFac);
Iterator iter_lignesFact = lignesFac.iterator();
while(iter_lignesFact.hasNext()){
LigneFacture lignefac_cur = iter_lignesFact.next();
}
}
首先,它将ligneFac
添加到列表lignesFac
。 ligneFac
现在是列表中的最后一个成员,除非出现奇怪的线程情况。然后,创建迭代器,并依次为每个成员设置lignefac_cur
,停在最后一个成员ligneFac
。那么,为什么不简单地将lignefac_cur
设置为ligneFac
?但是,你扔掉了lignefac_cur
。我假设你缩短了你最初编写的方法。
public void addLignesFacture(LigneFacture ligneFac){
this.lignesFac.add(ligneFac);
LigneFacture lignefac_cur = ligneFac;
// Do things with lignefac_cur.
// You might want to make it an instance variable instead,
// or even to have a method currentLigne() that gets the last
// member of the list. You might even want to use
// Stack or Queue as being more expressive.
}