如何寫出更好的Java代碼

發表于:2014-05-27來源:不詳作者:不詳點擊數: 標簽:
Java是最流行的編程語言之一,但似乎并沒有人喜歡使用它。好吧,實際上Java是一門還不錯的編程語言,由于最近Java 8發布了,我決定來編輯一個如何能更好地使用Java的列表,這里面

  Java是最流行的編程語言之一,但似乎并沒有人喜歡使用它。好吧,實際上Java是一門還不錯的編程語言,由于最近Java 8發布了,我決定來編輯一個如何能更好地使用Java的列表,這里面包括一些庫,實踐技巧以及工具。

  這篇文章在GitHub上也有。你可以隨時在上面貢獻或者添加你自己的Java使用技巧或者最佳實踐。

  編碼風格

  結構體

  builder模式

  依賴注入

  避免null值

  不可變

  避免過多的工具類

  格式

  文檔

  Stream

  部署

  框架

  Maven

  依賴收斂

  持續集成

  Maven倉儲

  配置管理

  庫

  遺失的特性

  Apache Commons

  Guava

  Gson

  Java Tuples

  Joda-Time

  Lombok

  Play framework

  SLF4J

  jOOQ

  測試

  jUnit 4

  jMock

  AssertJ

  工具

  IntelliJ IDEA

  Chronon

  JRebel

  校驗框架

  Eclipse Memory Analyzer

  資源

  書籍

  播客

  編碼風格

  傳統的Java編碼方式是非常啰嗦的企業級JavaBean的風格。新的風格更簡潔準確,對眼睛也更好。

  結構體

  我們這些碼農干的最簡單的事情就是傳遞數據了。傳統的方式就是定義一個JavaBean:

  public class DataHolder {

  private String data;

  public DataHolder() {

  }

  public void setData(String data) {

  this.data = data;

  }

  public String getData() {

  return this.data;

  }

  }

  這不僅拖沓而且浪費。盡管你的IDE可以自動地生成這個,但這還是浪費。因此,不要這么寫。

  相反的,我更喜歡C的結構體的風格,寫出來的類只是包裝數據:

  public class DataHolder {

  public final String data;

  public DataHolder(String data) {

  this.data = data;

  }

  }

  這樣寫減少了一半的代碼。不僅如此,除非你繼承它,不然這個類是不可變的,由于它是不可變的,因此推斷它的值就簡單多了。

  如果你存儲的是Map或者List這些可以容易被修改的數據,你可以使用ImmutableMap或者ImmutableList,這個在不可變性這節中會有討論。

  Builder模式

  如果你有一個相對復雜的對象,可以考慮下Builder模式。

  你在對象里邊創建一個子類,用來構造你的這個對象。它使用的是可修改的狀態,但一旦你調用了build方法,它會生成一個不可變對象。

  想象一下我們有一個非常復雜的對象DataHolder。它的構造器看起來應該是這樣的:

  public class ComplicatedDataHolder {

  public final String data;

  public final int num;

  // lots more fields and a constructor

  public class Builder {

  private String data;

  private int num;

  public Builder data(String data) {

  this.data = data;

  return this;

  }

  public Builder num(int num) {

  this.num = num;

  return this;

  }

  public ComplicatedDataHolder build() {

  return new ComplicatedDataHolder(data, num); // etc

  }

  }

  }

  現在你可以使用它了:

  final ComplicatedDataHolder cdh = new ComplicatedDataHolder.Builder()

  .data("set this")

  .num(523)

  .build();

  關于Builder的使用這里還有些更好的例子,我這里舉的例子只是想讓你大概感受一下。當然這會產生許多我們希望避免的樣板代碼,不過好處就是你有了一個不可變對象以及一個連貫接口。

  依賴注入

  這更像是一個軟件工程的章節而不是Java的,寫出可測的軟件的一個最佳方式就是使用依賴注入(Dependency injection,DI)。由于Java強烈鼓勵使用面向對象設計 ,因此想寫出可測性強的軟件,你需要使用DI。

  在Java中,這個通常都是用Spring框架來完成的。它有一個基于XML配置的綁定方式,并且仍然相當流行。重要的一點是你不要因為它的基于XML的配置格式而過度使用它了。在XML中應該沒有任何的邏輯和控制結構。它只應該是依賴注入。

原文轉自:http://it.deepinmind.com/java/2014/05/21/better-java.html

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97