В Java я хочу генерировать ошибку времени компиляции вместо ошибки времени выполнения - PullRequest
2 голосов
/ 20 ноября 2010

Я сейчас делаю что-то вроде этого;

import java.util.*;

public class TestHashMap {

    public static void main(String[] args) {

        HashMap<Integer, String> httpStatus = new HashMap<Integer, String>();
        httpStatus.put(404, "Not found");
        httpStatus.put(500, "Internal Server Error");

        System.out.println(httpStatus.get(404));    // I want this line to compile,
        System.out.println(httpStatus.get(500));    // and this line to compile.
        System.out.println(httpStatus.get(123));    // But this line to generate a compile-time error.

    }

}

Я хочу убедиться, что везде в моем коде есть httpStatus.get (n), что n допустимо во время компиляции, а не выясняется позже во время выполнения. Можно ли это как-то обеспечить? (В качестве «среды разработки» я использую текстовый редактор.)

Я очень новичок в Java (на этой неделе), поэтому, пожалуйста, будьте осторожны!

Спасибо.

Ответы [ 2 ]

7 голосов
/ 20 ноября 2010

В этом конкретном примере, похоже, что enum - это то, что вы можете искать:

public enum HttpStatus {
  CODE_404("Not Found"),
  CODE_500("Internal Server Error");

  private final String description;

  HttpStatus(String description) {
    this.description = description;
  }

  public String getDescription() {
    return description;
  }
}

Перечисление - это удобный способ создания констант в Java, которые применяются компилятором:

// prints "Not Found"
System.out.println(HttpStatus.CODE_404.getDescription());

// prints "Internal Server Error"
System.out.println(HttpStatus.CODE_500.getDescription());

// compiler throws an error for the "123" being an invalid symbol.
System.out.println(HttpStatus.CODE_123.getDescription());

Дополнительную информацию о том, как использовать перечисления, можно найти в Типах перечислений урок из Учебники Java .

0 голосов
/ 20 ноября 2010

Определите константы, такие как static final int NOT_FOUND = 404, INTERNAL_SERVER_ERROR = 500; и т. Д., Или используйте типы enum вместо использования "магических констант" в вашем коде.

...