предопределенные возможные значения в конструкторе - PullRequest
1 голос
/ 10 марта 2012

Допустим, у меня есть класс, который делает мяч.В конструкторе он принимает String для обозначения типа шара, но я хочу, чтобы он принимал только определенные значения, такие как: "FOOTBALL", "BASEBALL" или "SOCCERBALL", так что если я передам свой класс другомуразработчик, и они идут использовать его в Eclipse, он подсказывает им, как принять значение.Как бы я это сделал?Я понятия не имею, есть ли общий метод, который я мог бы использовать, или как он мог бы называться, поэтому приветствуются ссылки на учебник или пример.

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

Ответы [ 3 ]

8 голосов
/ 10 марта 2012

Вы можете использовать enum вместо строки, как показано ниже. Перечисления очень мощные, поэтому вы можете, например, добавить метод отскока для каждого типа шара, и каждый тип шара будет знать, как они должны отскакивать (см. Ссылку выше для получения дополнительной информации / примеров). Это также решает вашу проблему ограничения ценностей. Если вы не создадите тип MEATBALL в своем перечислении, никто не может передать фрикадельки как тип для вашего конструктора.

public enum BallType {
     FOOTBALL,
     BASEBALL,
     SOCCERBALL;
}

public Ball(BallType type) {
}
2 голосов
/ 10 марта 2012

Вот класс Ball, который по умолчанию равен FOOTBALL, если не указано иное:

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, который, я думаю, именно то, что вы ищете.Проверьте эту ссылку: Как написать комментарии к документу для инструмента Javadoc

0 голосов
/ 10 марта 2012

как насчет объявления открытых статических констант в вашем классе?Например, что-то вроде:

public static final String BALL_FOOTBALL = "FOOTBALL";...

Если вы сгенерируете исключение, если тип шара неправильный, это заставит другого разработчика использовать одну из предопределенных констант.

Надеюсь, это было полезно!

...