1
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 列表上定义了我的迭代器。

4

3 回答 3

14

您在这里使用了原始类型:

Iterator iter_lignesFact = lignesFac.iterator();

您想使用通用形式:

Iterator<LigneFacture> iter_lignesFact = lignesFac.iterator();
于 2013-03-21T22:59:56.767 回答
1

您已经使用了原始类型,但是您可以通过使用 foreach 循环来避免完全键入的麻烦和大量代码:

for (LigneFacture lignefac_cur : lignesFac) {
    // do something with lignefac_cur
}

如果迭代,使用 foreach 循环是一种非常整洁的方法。请注意,尽管使用这种循环进行整个迭代,但您可能不会更改集合。具体来说,没有iterator.remove()可用的等价物。但是,如果您在循环中不需要这种操作,则 foreach 是首选语法。

于 2013-03-21T23:12:05.287 回答
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到列表中lignesFacligneFac现在是列表的最后一个成员,除非出现奇怪的线程情况。然后,创建迭代器,并lignefac_cur依次设置到每个成员,在最后一个成员处停止,即ligneFac. 那么,为什么不简单地设置lignefac_curligneFac?但是,你扔掉了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.
} 
于 2013-03-21T23:13:47.810 回答