haocheng 積分 1

看來最多人支持的選項是 var+ val

IngramChen 積分 6 編輯於

annotation 太多個或是太多層容易變得很難懂。

太多層是我對 spring boot 最困擾的部份

文中的例子像是 @DatabaseType 就是 meta annotation ,而它的上一層是 @Conditional(DatabaseTypeCondition.class) ,所以這是兩層的結構。

感覺上只有兩層還好?可是你看 auto configuration 上面掛的 annotation:

@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ Registrar.class, DataSourcePoolMetadataProvidersConfiguration.class })
public class DataSourceAutoConfiguration { ... }

總共掛了四個,value 有一共有五個參數,請問有哪些是單層的 annotation,哪些是雙層以上的 meta annotation ?

看到這種程式就頭暈了,很難 trace 啊。

spring 從 xml 轉到現在的 java based 的設定,很多都是靠 annotation,但老實說 annotation-based 設定其實一多起來並沒有比 xml 好懂,這種只能算是 annotation-based 的設定吧,算不上真正的 純 java 設定。

IngramChen 積分 0

method 的顏色壞掉了,害我要改回來

haocheng 積分 0

沒有很吸引人的新功能,最大改變應該是版號改成 YYYY.R 吧 XD

haocheng 積分 1

看來 Spring 的作者覺得 Spring Boot 還是太複雜了 XD

haocheng 積分 1

Oracle 終於要把 Jigsaw 的程式 merge 進 JDK9 了

IngramChen 積分 0
import lombok.val;

val foo = new ArrayList<>();

我看了一下 lombok 的 val 是長這樣,實在有點無言… ,這寫法到了 java9 通通都要改了吧

話說 lombok 對 Java 實在是改太多了,改成這副德性我會直接選 kotlin 了。 (當然 lombok 出時 kotlin 也沒個影啦,但現在已經有選擇了)

ickxlin 積分 0

Che不知道跟切.格瓦拉有沒有關係.

IngramChen 積分 0

因為 這次是個 reboot 的機會,所以會想要一次到位把它搞定吧。參照別的語言 val/var/let 都用的很爽,我想 Java 也可以選擇比較簡潔的寫法。

我猜最後定案時大概是 val/var。哈

popcorny 積分 0 編輯於

其實想想也不用那麼複雜

var barList = new ArrayList<String>();
final var fooList = new ArrayList<String>();

這樣跟

ArrayList<String> barList = new ArrayList<>();
final ArrayList<String> fooList = new ArrayList<>();

一致不也挺好?

var就特別拿來用在type inference, final就來決定是不是可被assign

IngramChen 積分 0

上個世紀擔任這角色的是 xml,現在變 json…

koji 積分 0

之前有同事用 lombok val 就讓我有點抗拒 ^^;;;

haocheng 積分 0

其實也很難混用,要嘛就全部 sync ,不然就全部 async ,混用更難讀...

haocheng 積分 0

有道理,var/val 雖然可以少打幾個字,不過可讀性也稍微差了一點

IngramChen 積分 0

所以如果不是很有必要,就不要用 async 開發。我是覺得只有 android 有必要用 async 開發,server 其實只有少部份需要這樣寫。

IngramChen 積分 0

在 Dart 裡,也是有 var 的用法 (跟 js 一樣),也是到處都能寫。

不過 Dart 經過二年成熟後,他們最後的 code style 建議,你只該在 local 變數上使用 var,其他 instance field, method parameter 上都不該用。

Java 則是直接限制 var 只能在 local 變數上使用,這算是第一步就走對了,省得有人到處亂寫,影響程式可讀性。

haocheng 積分 0

不過 async 的寫法很容易會寫成這樣,用 rxjava 也有一樣問題...

haocheng 積分 0

用 final 也不錯,不過這樣 final 有兩種不同寫法好像又怪怪的

IngramChen 積分 0

我覺得 final 比較好,因為在 java 裡比較好認。

  var barList = new ArrayList<String>();
  final fooList = new ArrayList<String>();

var/val 雖然有很多優點,短,而且一樣長,但這兩個字實在太像了,可讀性有點差。當然可以靠 IDE 上不同色來解決啦…

haocheng 積分 0

現在考慮的幾個選項 var/val/let 好像都不是 keyword...