Skip to content

Commit d36bff7

Browse files
committed
refactor the Generic Team class as well & the best solution without casting! Type parameter T extends Player (makes the methods more restricted!)
1 parent ad88af9 commit d36bff7

File tree

5 files changed

+254
-0
lines changed

5 files changed

+254
-0
lines changed

src/main/java/bootstrap/DataLoader.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package bootstrap;
22

3+
import controller.GenericTeamController;
4+
import controller.GenericTeamRefactorController;
35
import controller.TeamController;
46
import model.type.RawTypeArrayList;
57
import model.type.TypeParameterArrayList;
@@ -16,5 +18,9 @@ public void load() {
1618
new TypeParameterArrayList().testType();
1719
separator.print();
1820
new TeamController().createTeam();
21+
separator.print();
22+
new GenericTeamController().createTeam();
23+
separator.print();
24+
new GenericTeamRefactorController().createTeam();
1925
}
2026
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package controller;
2+
3+
import model.generic.*;
4+
5+
public class GenericTeamController {
6+
7+
public void createTeam() {
8+
9+
FootballPlayer joe = new FootballPlayer("Joe");
10+
BaseballPlayer pat = new BaseballPlayer("Pat");
11+
SoccerPlayer beckham = new SoccerPlayer("Beckham");
12+
13+
// instead of T I added FootballPlayer as type argument!
14+
GenericTeam<FootballPlayer> adelaideCrows = new GenericTeam<>("Adelaide Crows");
15+
adelaideCrows.addPlayer(joe);
16+
// adelaideCrows.addPlayer(pat);
17+
// adelaideCrows.addPlayer(beckham);
18+
19+
System.out.println(adelaideCrows.numPlayers());
20+
21+
GenericTeam<BaseballPlayer> baseballTeam = new GenericTeam<>("Chicago Cubs");
22+
baseballTeam.addPlayer(pat);
23+
}
24+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package controller;
2+
3+
import model.generic.*;
4+
5+
public class GenericTeamRefactorController {
6+
7+
public void createTeam() {
8+
9+
FootballPlayer joe = new FootballPlayer("Joe");
10+
BaseballPlayer pat = new BaseballPlayer("Pat");
11+
SoccerPlayer beckham = new SoccerPlayer("Beckham");
12+
13+
GenericTeamRefactor<FootballPlayer> adelaideCrows = new GenericTeamRefactor<>("Adelaide Crows");
14+
adelaideCrows.addPlayer(joe);
15+
16+
GenericTeamRefactor<BaseballPlayer> baseballTeam = new GenericTeamRefactor<>("Chicago Cubs");
17+
baseballTeam.addPlayer(pat);
18+
19+
GenericTeamRefactor<SoccerPlayer> manchesterUnited = new GenericTeamRefactor<>("Manchester United");
20+
manchesterUnited.addPlayer(beckham);
21+
}
22+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package model.generic;
2+
3+
import java.util.ArrayList;
4+
5+
public class GenericTeam<T> {
6+
7+
private String name;
8+
int played = 0;
9+
int won = 0;
10+
int lost = 0;
11+
int tied = 0;
12+
13+
private ArrayList<T> members = new ArrayList<>();
14+
15+
public GenericTeam(String name) {
16+
this.name = name;
17+
}
18+
19+
// T is a parameterized type
20+
public boolean addPlayer(T player) {
21+
if (members.contains(player)) {
22+
// we make a casting down there! do not forget double brackets!
23+
System.out.println(((Player) player).getName() + " is already on this team");
24+
return false;
25+
} else {
26+
members.add(player);
27+
System.out.println(((Player) player).getName() + " picked for team " + this.name);
28+
return true;
29+
}
30+
}
31+
32+
public int numPlayers() {
33+
return this.members.size();
34+
}
35+
36+
public void matchResult(Team opponent, int ourScore, int theirScore) {
37+
if (ourScore > theirScore) {
38+
won++;
39+
} else if (ourScore < theirScore) {
40+
lost++;
41+
} else {
42+
tied++;
43+
}
44+
played++;
45+
if (opponent != null) {
46+
opponent.matchResult(null, theirScore, ourScore);
47+
}
48+
}
49+
50+
public int ranking() {
51+
return ((won * 2) + tied);
52+
}
53+
54+
public String getName() {
55+
return name;
56+
}
57+
58+
public void setName(String name) {
59+
this.name = name;
60+
}
61+
62+
public int getPlayed() {
63+
return played;
64+
}
65+
66+
public void setPlayed(int played) {
67+
this.played = played;
68+
}
69+
70+
public int getWon() {
71+
return won;
72+
}
73+
74+
public void setWon(int won) {
75+
this.won = won;
76+
}
77+
78+
public int getLost() {
79+
return lost;
80+
}
81+
82+
public void setLost(int lost) {
83+
this.lost = lost;
84+
}
85+
86+
public int getTied() {
87+
return tied;
88+
}
89+
90+
public void setTied(int tied) {
91+
this.tied = tied;
92+
}
93+
94+
public ArrayList<T> getMembers() {
95+
return members;
96+
}
97+
98+
public void setMembers(ArrayList<T> members) {
99+
this.members = members;
100+
}
101+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package model.generic;
2+
3+
import java.util.ArrayList;
4+
5+
public class GenericTeamRefactor<T extends Player> {
6+
7+
private String name;
8+
int played = 0;
9+
int won = 0;
10+
int lost = 0;
11+
int tied = 0;
12+
13+
private ArrayList<T> members = new ArrayList<>();
14+
15+
public GenericTeamRefactor(String name) {
16+
this.name = name;
17+
}
18+
19+
// T is a parameterized type
20+
public boolean addPlayer(T player) {
21+
if (members.contains(player)) {
22+
// works again because of T extends Player in the diamond!
23+
System.out.println(player.getName() + " is already on this team");
24+
return false;
25+
} else {
26+
members.add(player);
27+
System.out.println(player.getName() + " picked for team " + this.name);
28+
return true;
29+
}
30+
}
31+
32+
public int numPlayers() {
33+
return this.members.size();
34+
}
35+
36+
public void matchResult(Team opponent, int ourScore, int theirScore) {
37+
if (ourScore > theirScore) {
38+
won++;
39+
} else if (ourScore < theirScore) {
40+
lost++;
41+
} else {
42+
tied++;
43+
}
44+
played++;
45+
if (opponent != null) {
46+
opponent.matchResult(null, theirScore, ourScore);
47+
}
48+
}
49+
50+
public int ranking() {
51+
return ((won * 2) + tied);
52+
}
53+
54+
public String getName() {
55+
return name;
56+
}
57+
58+
public void setName(String name) {
59+
this.name = name;
60+
}
61+
62+
public int getPlayed() {
63+
return played;
64+
}
65+
66+
public void setPlayed(int played) {
67+
this.played = played;
68+
}
69+
70+
public int getWon() {
71+
return won;
72+
}
73+
74+
public void setWon(int won) {
75+
this.won = won;
76+
}
77+
78+
public int getLost() {
79+
return lost;
80+
}
81+
82+
public void setLost(int lost) {
83+
this.lost = lost;
84+
}
85+
86+
public int getTied() {
87+
return tied;
88+
}
89+
90+
public void setTied(int tied) {
91+
this.tied = tied;
92+
}
93+
94+
public ArrayList<T> getMembers() {
95+
return members;
96+
}
97+
98+
public void setMembers(ArrayList<T> members) {
99+
this.members = members;
100+
}
101+
}

0 commit comments

Comments
 (0)