2010-11-20 12 views
2

Je suis en train de faire quelque chose comme ça;En Java, je veux générer une erreur de compilation au lieu d'une erreur d'exécution

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. 

    } 

} 

Je veux faire en sorte que partout dans mon code qu'il ya un httpStatus.get (n), que n est valide à la compilation plutôt que de trouver plus tard lors de l'exécution. Cela peut-il être appliqué d'une manière ou d'une autre? (J'utilise un éditeur de texte brut comme mon "environnement de développement".)

Je suis très nouveau à Java (cette semaine) alors s'il vous plaît soyez gentil!

Merci.

Répondre

7

Dans cet exemple précis, il semble comme un enum est ce que vous cherchez peut-être:

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; 
    } 
} 

Un ENUM est un moyen pratique de créer des constantes en Java, qui sont appliquées par le compilateur:

// 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()); 

Vous trouverez plus d'informations sur l'utilisation des énumérations dans la leçon Enum Types de The Java Tutorials.

+1

Les constantes enum doivent être des identifiants, donc vous devez utiliser des noms comme "r404" et "r500" (ou quelque chose comme ça). – Pointy

+0

@Pointy Belle prise! Merci d'avoir fait remarquer cela! – coobird

+0

+1: Mais j'ai modifié pour le rendre cohérent pour vous. –

0

Définissez des constantes comme static final int NOT_FOUND = 404, INTERNAL_SERVER_ERROR = 500; et ainsi de suite ou utilisez les types enum au lieu d'utiliser des "constantes magiques" dans votre code.