2012-03-10 15 views
1

比方說,我有一個可以打球的類。在構造函數中,它接受String來指示球的類型,但我只希望它接受某些值,如:"FOOTBALL","BASEBALL""SOCCERBALL",這樣如果我將我的類傳遞給另一個開發人員並且他們將它用於Eclipse會提示他們接受的價值。我會怎麼做?我不知道是否有一個我可以使用的通用技術,或者它可能被稱爲什麼,所以指向教程或示例是值得歡迎的。在構造函數中的預定可能值

public class Ball { 
    public Ball(String type){ 
     … 
    } 
} 

回答

2

下面是默認爲足球,除非另有規定,否則球類:

public class Ball { 

    public static final int FOOTBALL = 0; 
    public static final int BASEBALL = 1; 
    public static final int SOCCERBALL = 2; 

    int ball; 

    public Ball(){ 
     this.ball = Ball.FOOTBALL; 
    }// end constructor 

    /** 
    * Class constructor. 
    * 
    * @param ball sets the ball value.<p> 
    * <b>ball</b> must be one of the following: Ball.FOOTBALL, Ball.BASEBALL, 
    *    Ball.SOCCERBALL. 
    */ 
    public Ball(int ball){   
     setBall(ball);  
    }// end constructor 

    public int getBall(){ 
     return ball; 
    }// end getBall() 

    public void setBall(int ball){   
     switch(ball){   
     case 1: 
      this.ball = Ball.BASEBALL; 
      break; 
     case 2: 
      this.ball = Ball.SOCCERBALL; 
      break; 
     default: 
      this.ball = Ball.FOOTBALL; 
      break;   
     }// end switch   
    }// end setBall()  
}// end class Ball 

編輯:

我添加文檔註釋的javadoc爲我認爲這是你在找什麼。檢查此鏈接:How to Write Doc Comments for the Javadoc Tool

+1

假設後續開發人員(SD)開始使用3作爲一些足球。直到你(U)需要將GOLF添加到列表中,沒有任何問題。 SD認爲U通過添加新的球類型而引起了問題。 ü相信SD通過使用非標準ID來引起問題。誰是對的? – emory 2012-03-10 19:54:38

+0

如果SD已經讀了javadocs,那麼SD應該已經知道得更好,應該只傳遞一個靜態值,比如Ball.FOOTBALL。 – Luis 2012-03-10 20:01:37

+0

枚舉比常量更清晰和強大,我想不出一個不使用它們的理由,對嗎? – assylias 2012-03-10 20:13:39

8

您可以使用enum而不是字符串,如下所示。枚舉是非常強大的,所以你可以爲每個球類型添加一個反彈方法,並且每個球類型都知道它們應該如何反彈(參見上面的鏈接瞭解更多信息/示例)。這也解決了你限制價值的問題。如果你不在你的枚舉中創建一個MEATBALL類型,那麼沒有人可以將肉球作爲你的構造函數的類型傳遞。

public enum BallType { 
    FOOTBALL, 
    BASEBALL, 
    SOCCERBALL; 
} 

public Ball(BallType type) { 
} 
0

怎麼樣在你的類中聲明公共靜態常量?例如,如下所示:

public static final String BALL_FOOTBALL =「FOOTBALL」; ...

如果在球類型錯誤時拋出異常,它將強制其他開發人員使用其中一個預定義的常量。

希望它有幫助!

+1

它不會強制其他開發人員使用其中一個預定義的常量。它會編譯得很好,只會在運行時失敗。然後用戶會發現開發人員輸入「FOOTBALL」時鍵入「FootBall」。在編譯時找到這些東西要好得多。編譯器(不像用戶)不會對所有人都不好。所以讓它儘可能地發現你的錯誤。 – emory 2012-03-10 19:48:44

相關問題