如何使用java8的CompletableFuture和功能接口?

时间:2017-04-03 16:58:07

标签: java asynchronous interface functional-programming completable-future

我想将类CompteBancaire替换为功能接口,有人可以告诉我该怎么做吗?

以下是代码段,我想在CompletableFutureverserArgent方法中使用retirerArgent进行异步任务。

package myclasses;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;

public class CompteBancaire {

    private int numC;
    private int nbTraces;
    public static int nbComptes;
    public double solde;
    private String nom;
    private String prenom;

    private List<Double> tracesComptes = new ArrayList<>();

    /**
     * @Constructeur non pramétré
     */
    public CompteBancaire() {
        this.tracesComptes = new ArrayList<>();
        nbComptes++;

    }

    /**
     *
     * @param numC
     * @param solde
     * @param nom
     * @param prenom
     *
     * @Constructeur pramétré
     */
    public CompteBancaire(int numC, double solde, String nom, String prenom) {
        this.numC = numC;
        this.solde = solde;
        this.nom = nom;
        this.prenom = prenom;
        this.tracesComptes = new ArrayList<>();
        nbComptes++;
    }

    /**
     *
     * @return @getters && setters
     *
     *
     */
    public int getNumC() {
        return numC;
    }

    public void setNumC(int numC) {
        this.numC = numC;
    }

    public int getNbTraces() {
        return nbTraces;
    }

    public void setNbTraces(int nbTraces) {
        this.nbTraces = nbTraces;
    }

    public double getSolde() {
        return solde;
    }

    public void setSolde(double solde) {
        this.solde = solde;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getPrenom() {
        return prenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    /**
     *
     * @param tracesCompte
     */
    public void setTracesCompte(List<Double> tracesCompte) {
        this.tracesComptes = tracesCompte;
    }

    /**
     *
     * @param montant
     * @return
     * @throws tp3.ErreurNegatif
     * @Methode qui depose de l'argent au compte (versement)
     *
     */

    public void verserArgent(double montant) throws ErreurNegatif, Throwable {
        if (montant > 0) {
            solde += montant;
            tracesComptes.add(nbTraces, solde);
            nbTraces++;
        } else {
            throw new ErreurNegatif();
        }

    }

    /**
     *
     * @Methode qui retire de l'argent du compte
     *
     */
    void retirerArgent(double montant) throws ErreurNegatif {
        if (solde - montant > 0) {
            solde -= montant;
            tracesComptes.add(nbTraces, solde);
            nbTraces++;
        } else {
            throw new ErreurNegatif();
        }

    }

    /**
     *
     * @return @Methode qui affiche les informations relatives au compte
     *
     *
     */
    public String description() {

        return "Titulaire du compte:" + nom + " " + prenom + ", Numéro compte:" + numC + ", Solde:" + solde;
    }
}

1 个答案:

答案 0 :(得分:0)

功能界面是界面,只有一种方法。你的班级有(1)多于一种方法,(2)包含一个带有正文的方法,这意味着它无法转换为功能界面。当然,您可以创建一个界面然后实现它。

请用英语重写您的代码并编辑您的答案!

public void verserArgent(double montant) throws ErreurNegatif, Throwable {
   if (montant > 0) {
       solde += montant;
       tracesComptes.add(nbTraces, solde);
       nbTraces++;
   } else {
       throw new ErreurNegatif();
   }
}

这是您要执行异步的方法。 (我完全不了解你,但我认为这就是你想要做的)。执行此方法异步并没有多大意义,因为它并不昂贵。

CompletableFuture可以简单地实例化并使用其方法complete(T result)完成。

例如:

    public CompletableFuture<Void> verserArgent(double montant) throws ErreurNegatif, Throwable {
   CompletableFuture<Void> future = new CompletableFuture<>();
   if (montant > 0) {
       solde += montant;
       tracesComptes.add(nbTraces, solde);
       nbTraces++;
       future.complete(null);
   } else {
       throw new ErreurNegatif();
   }
   return future;
}

同样,这有效,但没有意义。