2010-09-04 3 views
3

J'ai une boucle while, et l'utilisateur devrait être capable de décider quand la boucle s'arrête. Après x secondes, après x boucles, ... Ce problème devrait être mis en œuvre en fonction de la conception basée sur des règles. Je sais comment faire cela en C++ mais je n'arrive pas à le faire fonctionner en Java.Conception à base de règles Java

Ce que je fais maintenant est le suivant.

Il est où les politiques devraient être applicables Priseur de classe avec la méthode "start()":

public <E extends AbstractEndAuctionPolicy> void start(E policy) { //use policy here }

Parce que AbstractEndAuctionPolicy a la méthode "endAuction()", nous sommes en mesure de le faire: policy.endAuction(). En C++, il n'y a pas besoin de « étend AbstractEndAuctionPolicy » ...

Mais je ne peux pas comprendre comment utiliser cette méthode, ce qui suit ne fonctionne pas:

this.auctioneer.start<NewBidPolicy>(n);

vous espérez aider les gars peuvent moi et informez-moi un peu sur la conception basée sur les politiques en Java parce que Google ne me donne pas de réponses.

Merci d'avance.

Répondre

1

Habituellement, le compilateur est capable de déterminer le type générique du type de paramètre, à savoir simplement

this.auctioneer.start(n); 

peut travailler (il est difficile de dire à coup sûr, puisque vous donnez si peu le contexte). Mais si cela ne satisfait pas le compilateur, essayez

this.auctioneer.<NewBidPolicy>start(n); 

Depuis Java génériques sont beaucoup moins puissants que les modèles C++, je n'ai même pas entendu le terme « politique » utilisé beaucoup dans le domaine de Java. Cependant, votre approche semble être une bonne approximation.

+0

Ok, j'ai compris que NewBidPolicy doit étendre AbstractEndAuctionPolicy dans la définition de classe. Mais maintenant je ne vois plus l'avantage des génériques. C'est juste l'héritage maintenant? – Niel

+1

@mrdckx, vous avez raison, c'est l'une des façons dont les génériques Java sont plus limités que les templates C++. C'est à dire. vous devez spécifier une superinterface afin de pouvoir appeler une méthode spécifique sur un objet paramètre générique. Donc vous avez un bon point en effet, dans ce cas vous pouvez réellement abandonner les génériques et simplement passer un paramètre 'AbstractEndAuctionPolicy' à' start() '. –

+0

Ok! Merci pour les réponses rapides. – Niel

Questions connexes