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
設定。
import lombok.val;
val foo = new ArrayList<>();
我看了一下 lombok 的 val 是長這樣,實在有點無言… ,這寫法到了 java9 通通都要改了吧
話說 lombok 對 Java 實在是改太多了,改成這副德性我會直接選 kotlin 了。 (當然 lombok 出時 kotlin 也沒個影啦,但現在已經有選擇了)
因為 這次是個 reboot 的機會,所以會想要一次到位把它搞定吧。參照別的語言 val/var/let 都用的很爽,我想 Java 也可以選擇比較簡潔的寫法。
我猜最後定案時大概是 val/var。哈
在 Dart 裡,也是有 var
的用法 (跟 js 一樣),也是到處都能寫。
不過 Dart 經過二年成熟後,他們最後的 code style 建議,你只該在 local 變數上使用 var
,其他 instance field, method parameter 上都不該用。
Java 則是直接限制 var
只能在 local 變數上使用,這算是第一步就走對了,省得有人到處亂寫,影響程式可讀性。
我覺得 final 比較好,因為在 java 裡比較好認。
var barList = new ArrayList<String>();
final fooList = new ArrayList<String>();
var/val 雖然有很多優點,短,而且一樣長,但這兩個字實在太像了,可讀性有點差。當然可以靠 IDE 上不同色來解決啦…