看高手代码--从小case学大道理

今天看sun的HttpMessages.java文件,虽然文件很小,但是对我的启发很大。
前面定义了大量的HTTP常量:

Java代码 复制代码
  1. ...   
  2. ...   
  3. private static final String STATUS_305 = "Use Proxy";   
  4. private static final String STATUS_307 = "Temporary Redirect";   
  5. private static final String STATUS_400 = "Bad Request";   
  6. private static final String STATUS_401 = "Unauthorized";   
  7. private static final String STATUS_402 = "Payment Required";   
  8. private static final String STATUS_403 = "Forbidden";   
  9. private static final String STATUS_404 = "Not Found";   
  10. private static final String STATUS_405 = "Method Not Allowed";   
  11. private static final String STATUS_406 = "Not Acceptable";   
  12. private static final String STATUS_407 = "Proxy Authentication Required";   
  13. private static final String STATUS_408 = "Request Timeout";   
  14. ...   
  15. ...  
    ...
    ...
    private static final String STATUS_305 = "Use Proxy";
    private static final String STATUS_307 = "Temporary Redirect";
    private static final String STATUS_400 = "Bad Request";
    private static final String STATUS_401 = "Unauthorized";
    private static final String STATUS_402 = "Payment Required";
    private static final String STATUS_403 = "Forbidden";
    private static final String STATUS_404 = "Not Found";
    private static final String STATUS_405 = "Method Not Allowed";
    private static final String STATUS_406 = "Not Acceptable";
    private static final String STATUS_407 = "Proxy Authentication Required";
    private static final String STATUS_408 = "Request Timeout";
    ...
    ...


也可以趁机从这里查看HTTP返回值的意义^_^。然后定义了一个java.util.concurrent.ConcurrentHashMap的变量httpStatusCodeMappings,再往里面添加刚才定义的常量(这个操作放在了一个静态块里),如:

Java代码 复制代码
  1. static {   
  2.         httpStatusCodeMappings.put("sc.100", STATUS_100);   
  3.         httpStatusCodeMappings.put("sc.101", STATUS_101);   
  4.         httpStatusCodeMappings.put("sc.200", STATUS_200);   
  5.         httpStatusCodeMappings.put("sc.201", STATUS_201);   
  6.         httpStatusCodeMappings.put("sc.202", STATUS_202);   
  7.         httpStatusCodeMappings.put("sc.203", STATUS_203);   
  8.   ...   
  9.   ...  
static {
        httpStatusCodeMappings.put("sc.100", STATUS_100);
        httpStatusCodeMappings.put("sc.101", STATUS_101);
        httpStatusCodeMappings.put("sc.200", STATUS_200);
        httpStatusCodeMappings.put("sc.201", STATUS_201);
        httpStatusCodeMappings.put("sc.202", STATUS_202);
        httpStatusCodeMappings.put("sc.203", STATUS_203);
  ...
  ...


最重要的就是这个方法了,先看代码

Java代码 复制代码
  1. public static String getMessage(int status) {   
  2.   
  3.         // Return the status message for the most frequently used status   
  4.         // codes directly, without any lookup   
  5.         switch (status) {   
  6.             case 200return STATUS_200;   
  7.             case 302return STATUS_302;   
  8.             case 400return STATUS_400;   
  9.             case 404return STATUS_404;   
  10.     }   
  11.   
  12.         return httpStatusCodeMappings.get("sc."+ status);   
  13.     }  
public static String getMessage(int status) {

        // Return the status message for the most frequently used status
        // codes directly, without any lookup
        switch (status) {
            case 200: return STATUS_200;
            case 302: return STATUS_302;
            case 400: return STATUS_400;
            case 404: return STATUS_404;
	}

        return httpStatusCodeMappings.get("sc."+ status);
    }


这段代码的用途很简单,就是要返回状态码对应的Message,而这些这些消息都已经存放在httpStatusCodeMappings变量里了,为了提高访问常用的几个返回码的Message,它直接用了一个静态块,而不去lookup那个map了,这就是高手!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值