加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

腾讯工作近十年大佬:不是我打击你!你可能真的不会写Java

发布时间:2019-07-02 16:11:34 所属栏目:优化 来源:程序员小姐
导读:文章核心 其实,本不想把标题写的那么恐怖,只是发现很多人干了几年 Java 以后,都自认为是一个不错的 Java 程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做 Java 的同行们,只是希望读者看到此篇文章后,可以和我一样

这样的 builder 代码,让我是在恶心难受,于是我打算用 lombok 重构这段代码:

  1. @Builder 
  2. public class Student { 
  3.  private String name; 
  4.  private int age; 

调用方式:

  1. Student student = Student.builder().name("zs").age(24).build(); 

代理模式

正如我们所知的,在程序中调用 rest 接口是一个常见的行为动作,如果你和我一样使用过 spring 的 RestTemplate,我相信你会我和一样,对他抛出的非 http 状态码异常深恶痛绝。

所以我们考虑将 RestTemplate 最为底层包装器进行包装器模式的设计:

  1. public abstract class FilterRestTemplate implements RestOperations { 
  2.  protected volatile RestTemplate restTemplate; 
  3.  protected FilterRestTemplate(RestTemplate restTemplate){ 
  4.  this.restTemplate = restTemplate; 
  5.  } 
  6.  //实现RestOperations所有的接口 

然后再由扩展类对 FilterRestTemplate 进行包装扩展:

  1. public class ExtractRestTemplate extends FilterRestTemplate { 
  2.  private RestTemplate restTemplate; 
  3.  public ExtractRestTemplate(RestTemplate restTemplate) { 
  4.  super(restTemplate); 
  5.  this.restTemplate = restTemplate; 
  6.  } 
  7.  public <T> RestResponseDTO<T> postForEntityWithNoException(String url, Object request, Class<T> responseType, Object... uriVariables) 
  8.  throws RestClientException { 
  9.  RestResponseDTO<T> restResponseDTO = new RestResponseDTO<T>(); 
  10.  ResponseEntity<T> tResponseEntity; 
  11.  try { 
  12.  tResponseEntity = restTemplate.postForEntity(url, request, responseType, uriVariables); 
  13.  restResponseDTO.setData(tResponseEntity.getBody()); 
  14.  restResponseDTO.setMessage(tResponseEntity.getStatusCode().name()); 
  15.  restResponseDTO.setStatusCode(tResponseEntity.getStatusCodeValue()); 
  16.  }catch (Exception e){ 
  17.  restResponseDTO.setStatusCode(RestResponseDTO.UNKNOWN_ERROR); 
  18.  restResponseDTO.setMessage(e.getMessage()); 
  19.  restResponseDTO.setData(null); 
  20.  } 
  21.  return restResponseDTO; 
  22.  } 

包装器 ExtractRestTemplate 很完美的更改了异常抛出的行为,让程序更具有容错性。在这里我们不考虑 ExtractRestTemplate 完成的功能,让我们把焦点放在 FilterRestTemplate 上,“实现 RestOperations 所有的接口”,这个操作绝对不是一时半会可以写完的,当时在重构之前我几乎写了半个小时,如下:

  1. public abstract class FilterRestTemplate implements RestOperations { 
  2.  protected volatile RestTemplate restTemplate; 
  3.  protected FilterRestTemplate(RestTemplate restTemplate) { 
  4.  this.restTemplate = restTemplate; 
  5.  } 
  6.  @Override 
  7.  public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientException { 
  8.  return restTemplate.getForObject(url,responseType,uriVariables); 
  9.  } 
  10.  @Override 
  11.  public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException { 
  12.  return restTemplate.getForObject(url,responseType,uriVariables); 
  13.  } 
  14.  @Override 
  15.  public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException { 
  16.  return restTemplate.getForObject(url,responseType); 
  17.  } 
  18.  @Override 
  19.  public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables) throws RestClientException { 
  20.  return restTemplate.getForEntity(url,responseType,uriVariables); 
  21.  } 
  22.  //其他实现代码略。。。 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读