2010-11-20 4 views
2

Ich mache gerade etwas wie das;In Java möchte ich einen Kompilierungsfehler anstelle eines Laufzeitfehlers erzeugen

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. 

    } 

} 

ich, dass überall in meinem Code sicherstellen will, dass es ein httpStatus.get (n) ist, dass n zur Compile-Zeit gültig statt findet später zur Laufzeit aus. Kann das irgendwie durchgesetzt werden? (Ich benutze einen einfachen Texteditor als meine "Entwicklungsumgebung".)

Ich bin sehr neu in Java (diese Woche) also bitte sei sanft!

Danke.

Antwort

7

In diesem speziellen Beispiel scheint es wie ein enum ist, was Sie können suchen:

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

eine ENUM ist eine praktische Möglichkeit, Konstanten in Java zu schaffen, die durch den Compiler erzwungen werden:

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

Weitere Informationen zur Verwendung von Enums finden Sie in der Enum Types Lektion von The Java Tutorials.

+1

Enum-Konstanten müssen Bezeichner sein, also müssten Sie Namen wie "r404" und "r500" (oder so ähnlich) verwenden. – Pointy

+0

@Pointy Netter Fang! Danke, dass du das unterstrichen hast! – coobird

+0

+1: Aber ich bearbeitet, um es für Sie konsistent zu machen. –

0

Definieren Sie Konstanten wie static final int NOT_FOUND = 404, INTERNAL_SERVER_ERROR = 500; usw. oder verwenden Sie enum Typen anstelle von "magische Konstanten" in Ihrem Code.