作爲一個大學項目,我正在編寫一個Java程序,它從一個Player類派生類並將它們存儲在一個Club類中。該俱樂部是一個板球俱樂部(因此變量/類名稱)。下面的類仍然只是部分構建,但它編譯並且對於我需要解決的問題已經足夠完整。在Java中修復「發現未檢查的轉換」警告?
import java.util.*;
public class Club{
private String name;
private List<Player> players;
private Set<Player> playersAverage;
private int regID;
@SuppressWarnings(value = {"unchecked"})
public Club(){
this.name = "";
this.players = new ArrayList<Player>();
this.playersAverage = new TreeSet<Player>(new BattingAverageComparator());
this.regID = 1;
}
@SuppressWarnings(value = {"unchecked"})
public Club(String name){
this.name = name;
this.players = new ArrayList<Player>();
this.playersAverage = new TreeSet<Player>(new BattingAverageComparator());
this.regID = 1;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public boolean registerPlayer(Player player) throws UninitialisedObjectException, NullPointerException{
if(!(validPlayer(player))){
throw new UninitialisedObjectException("attempted to add an uninitialised player object to Club.players");
}
if(!(this.players.contains(player))){
player.setRegID(this.regID);
this.regID++;
for(int i = 0; i < this.players.size(); i++){
if(player.compareTo(this.players.get(i)) > 0){
this.players.add(i,player);
return true;
}
}
}
return false;
}
public boolean removePlayer(Player player) throws NullPointerException{
return this.players.remove(player);
}
public String getPlayerDetails(int regID) throws InvalidRegistrationIDException{
String s = "";
for (int i=0; i < this.players.size(); i++){
if (this.players.get(i).getRegID() == regID){
s = this.players.get(i).toString();
break;
}
}
if(s == ""){
throw new InvalidRegistrationIDException("getPlayerDetails() attempted on invalid regID");
}
return s;
}
private boolean validPlayer(Player player){
return player.getFirstName()!="" || player.getLastName()!="" || player.getAge()>0 || player.getHeight()>0 || player.getWeight()>0;
}
public void averages(BattingAverageComparator compareAveragesOf){
}
}
使用以下比較:
import java.util.*;
public class BattingAverageComparator implements Comparator{
public int compare(Object obj1,Object obj2) throws IllegalArgumentException{
if(!(obj1 instanceof Player) || !(obj2 instanceof Player)){
throw new IllegalArgumentException("BattingAverageComparator cannot compare objects that are not of, or do not extend, the Player class.");
}
Player thisPlayer = (Player) obj1;
Player thatPlayer = (Player) obj2;
if(thisPlayer.getDismissals() == 0 && thatPlayer.getDismissals() == 0){
if(thisPlayer.getRuns() > thatPlayer.getRuns()){
return 1;
}
else if (thisPlayer.getRuns() < thatPlayer.getRuns()){
return -1;
}
else{
return thisPlayer.compareTo(thatPlayer);
}
}
else if(thisPlayer.getDismissals() == 0 && thatPlayer.getDismissals() > 0){
return -1;
}
else if(thisPlayer.getDismissals() > 0 && thatPlayer.getDismissals() == 0){
return 1;
}
else{
double thisAverage = thisPlayer.getRuns()/thisPlayer.getDismissals();
double thatAverage = thatPlayer.getRuns()/thatPlayer.getDismissals();
if(thisAverage > thatAverage){
return 1;
}
else if(thisAverage == thatAverage){//need to make a double threshold
return 0;
}
else{
return -1;
}
}
}
public boolean equals(Object obj){
return obj instanceof BattingAverageComparator;
}
}
下面的警告出現兩個構造:
Club.java:13: warning: [unchecked] unchecked conversion found : BattingAverageComparator
required: java.util.Comparator<? super Player>
this.playersAverage = new TreeSet<Player>(new BattingAverageComparator());
有我編譯下面的類時,接收兩個未選中的警告無論如何解決這個問題,而不是壓制警告?
如果您需要更多信息,我會發布它。該課程中有不少課程,我認爲目前沒有必要全部發布。
+1對於一個非常好的解釋。希望你不要介意我在第二段中加入反斜槓'',這樣它就不會被解釋爲HTML。 –
2012-04-21 21:12:02
是的,我明白了。謝謝。 – rota 2012-04-21 21:18:48
@AdamMihalcin我甚至沒有想到!大聲笑 – Lucas 2012-04-22 00:26:49