Java 构造函数中预先确定的可能值

Java 构造函数中预先确定的可能值,java,types,javadoc,Java,Types,Javadoc,比如说,我有一个能做球的班级。在构造函数中,它接受一个字符串,以指示球的类型,但我只希望它接受某些值,如:“FOOTBALL”,“ball”,或“SOCCERBALL”,这样,如果我将类传递给另一个开发人员,他们在Eclipse中使用它,它会提示他们接受的值。我该怎么做?我不知道是否有一个通用的技术,我可以使用或它可能会被称为什么,所以指向一个教程或例子将是受欢迎的 public class Ball { public Ball(String type){ … }

比如说,我有一个能做球的班级。在构造函数中,它接受一个
字符串
,以指示球的类型,但我只希望它接受某些值,如:
“FOOTBALL”
“ball”
,或
“SOCCERBALL”
,这样,如果我将类传递给另一个开发人员,他们在Eclipse中使用它,它会提示他们接受的值。我该怎么做?我不知道是否有一个通用的技术,我可以使用或它可能会被称为什么,所以指向一个教程或例子将是受欢迎的

public class Ball {
    public Ball(String type){
        …
    }
}
您可以使用一个而不是字符串,如下所示。枚举非常强大,因此您可以为每个球类型添加一个bounce方法,每个球类型都知道它们应该如何反弹(有关更多信息/示例,请参阅上面的链接)。这也解决了限制值的问题。如果不在枚举中创建MEATBALL类型,则没有人可以将MEATBALL作为构造函数的类型传递

public enum BallType {
     FOOTBALL,
     BASEBALL,
     SOCCERBALL;
}

public Ball(BallType type) {
}
您可以使用一个而不是字符串,如下所示。枚举非常强大,因此您可以为每个球类型添加一个bounce方法,每个球类型都知道它们应该如何反弹(有关更多信息/示例,请参阅上面的链接)。这也解决了限制值的问题。如果不在枚举中创建MEATBALL类型,则没有人可以将MEATBALL作为构造函数的类型传递

public enum BallType {
     FOOTBALL,
     BASEBALL,
     SOCCERBALL;
}

public Ball(BallType type) {
}

在类中声明公共静态常量怎么样?例如,类似于:

公共静态最终弦球\u FOOTBALL=“FOOTBALL”;

如果您在ball类型错误时抛出异常,它将强制其他开发人员使用预定义的常量之一


希望对你有帮助

在类中声明公共静态常量怎么样?例如,类似于:

公共静态最终弦球\u FOOTBALL=“FOOTBALL”;

如果您在ball类型错误时抛出异常,它将强制其他开发人员使用预定义的常量之一


希望对你有帮助

这里有一个默认为FOOTBALL的Ball类,除非另有规定:

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
公开课舞会{
公共静态决赛int FOOTBALL=0;
公共静态最终积分=1;
公共静态最终国际足球赛=2;
int-ball;
公共舞会{
这个球=足球;
}//端构造函数
/**
*类构造函数。
*
*@param-ball设置球值。
*球必须是下列之一:球。足球,球。棒球,
*球,足球。
*/
公共球(内球){
挫折球;
}//端构造函数
公共int getBall(){
回球;
}//结束getBall()
公众球(界内球){
开关(球){
案例1:
这个球=棒球;
打破
案例2:
this.ball=ball.SOCCERBALL;
打破
违约:
这个球=足球;
打破
}//终端开关
}//(完)
}//末级球
编辑:


我为javadoc添加了doc注释,我想这正是您需要的。查看此链接:

这里有一个默认为FOOTBALL的Ball类,除非另有说明:

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
公开课舞会{
公共静态决赛int FOOTBALL=0;
公共静态最终积分=1;
公共静态最终国际足球赛=2;
int-ball;
公共舞会{
这个球=足球;
}//端构造函数
/**
*类构造函数。
*
*@param-ball设置球值。
*球必须是下列之一:球。足球,球。棒球,
*球,足球。
*/
公共球(内球){
挫折球;
}//端构造函数
公共int getBall(){
回球;
}//结束getBall()
公众球(界内球){
开关(球){
案例1:
这个球=棒球;
打破
案例2:
this.ball=ball.SOCCERBALL;
打破
违约:
这个球=足球;
打破
}//终端开关
}//(完)
}//末级球
编辑:


我为javadoc添加了doc注释,我想这正是您需要的。查看此链接:

它不会强制其他开发人员使用预定义的常量之一。它可以很好地编译,只会在运行时失败。然后,用户将发现开发人员在应该键入“FootBall”时键入了“FootBall”。最好在编译时找到这些东西。编译器(与用户不同)不会对所有人说你的坏话。因此,让它尽可能多地发现你的错误。它不会真正迫使其他开发人员使用预定义的常量之一。它可以很好地编译,只会在运行时失败。然后,用户将发现开发人员在应该键入“FootBall”时键入了“FootBall”。最好在编译时找到这些东西。编译器(与用户不同)不会对所有人说你的坏话。因此,让它尽可能多地发现您的错误。假设后续开发人员(SD)开始在一些足球比赛中使用3。没有问题,直到你(U)需要将高尔夫添加到列表中。SD认为是U添加了新的球类型导致了问题。你认为SD是使用非标准id造成问题的。谁说得对?如果SD读过javadocs,那么SD应该知道得更好,应该只传递一个静态值,比如Ball.FOOTBALL.enum比常量更干净、更强大,我想不出一个不使用它们的理由,是吗,我可以想出几个不使用enum的原因。例如:枚举不能扩展