• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何寫出更好的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

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>