Bonjour,

Je me demandais si suivant vos expériences, vous avez déjà été confrontés à utiliser les génériques de manière un peu excessive ? Si oui, pouvez-vous me dire si je ne suis pas tombé un peu dans l'excès avec mon enum. Histoire que vous ne expliquez un peu ce que j'ai essayé de faire: j'ai une classe Game qui utilise un Board et des Player qui exécute des Action sur le Board. Mes jeux de plateau vont tous hériter de cette classe, voilà pourquoi j'essaie d'être le plus générique possible et aussi pour ne pas devoir faire de cast à tout bout de champ dans les classes qui héritent.

Maintenant, il est peut-être préférable d'en rester aux casts pour l'utilisation que j'en fait, qui reste, il est vrai, très basique car j'en fait tout au plus 1 fois dans 2-3 méthodes que doivent définir chacun des jeux. D'ailleurs, leur utilisation se répercute un peu partout. Une fois que j'en ai employé dans la classe Game, il a fallu que j'en introduise dans les classes Player et Board, ce qui devient un peu embêtant je trouve.

Voilà pourquoi je viens demander votre avis d'expert

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
public enum GameState {
	JOINING {
 
		public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void joinPlayer(G game, Session session) {
			game.insertPlayer(session);
			if (game.getExpectedPlayerCount() == 0) {
				game.setState(OPEN);
			}
		}
	},
	OPEN {
 
		public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void playGame(G game) {
			game.performGame();
		}
 
		public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void playTurn(G game) {
			game.performTurn();
		}
 
		public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void makeAction(G game, Session session, A action) {
			game.performAction(session, action);
			if (game.isOver()) {
				game.setState(ENDED);
			}
		}
 
	},
	ENDED {
		public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void playGame(G game) {
			/* Restart the game with the same players */
			game.setState(OPEN);
		}
	};
 
	public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void joinPlayer(G game, Session session) { /* Nothing to do */ }
	public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void playGame(G game) { /* Nothing to do */ };
	public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void playTurn(G game) { /* Nothing to do */ };
	public <B extends Board, A extends Action<B>, P extends Player<B, A>, G extends Game<B, A, P>> void makeAction(G game, Session session, A action) { /* Nothing to do */ };
Merci