讓安卓開發變得很簡單——Lombok,lambda,Instant run
今天開始介紹專案中的一些奇淫技巧,幫助安卓開發者更快更方便的開發!
1.騷年技巧一之Lombok
Lombok簡介
Lombok是一個可以通過簡單的註解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java程式碼的工具,通過使用對應的註解,可以在編譯原始碼的時候生成對應的方法。
官方地址:https://projectlombok.org/
github地址:https://github.com/rzwitserloot/lombok。
如何使用到專案中:
在官方文件中說明很清楚,首先在Plugins下載一個 Lombok Plugin
https://projectlombok.org/setup/android.html
Go to File > Settings > Plugins
Click on Browse repositories…
Search for Lombok Plugin
Click on Install plugin
Restart Android Studio
然後在
build.gradle
新增依賴
provided “org.projectlombok:lombok:1.12.6”
下面我們就可以開始使用Lombok了!
學習mark:
Lombok提供了以下註解
- val:
用在區域性變數前面,相當於將變數宣告為final - @NonNull:
給方法引數增加這個註解會自動在方法內對該引數進行是否為空的校驗,如果為空,則丟擲NPE(NullPointerException) - @Cleanup:
自動管理資源,用在區域性變數之前,在當前變數範圍內即將執行完畢退出之前會自動清理資源,自動生成try-finally這樣的程式碼來關閉流 - @Getter/@Setter:
用在屬性上,再也不用自己手寫setter和getter方法了,還可以指定訪問範圍 @ToString:
用在類上,可以自動覆寫toString方法,當然還可以加其他引數,
例如 @ToString(exclude =”id”)排除id屬性,
或者 @ToString(callSuper = true, includeFieldNames = true)呼叫父類的toString方法,包含所有屬性@EqualsAndHashCode:用在類上,自動生成equals方法和hashCode方法
- @NoArgsConstructor,
@RequiredArgsConstructor
[email protected]:
用在類上,自動生成無參構造和使用所有引數的建構函式以及把所有@NonNull屬性作為引數的建構函式,如果指定staticName = “of”引數,同時還會生成一個返回類物件的靜態工廠方法,比使用建構函式方便很多 - @Data:
註解在類上,相當於同時使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和NoArgsConstructor - @Value:
用在類上,是@Data的不可變形式,相當於為屬性新增final宣告,只提供getter方法,而不提供setter方法 - @Builder:用在類、構造器、方法上,
為你提供複雜的builder APIs,讓你可以像如下方式一樣呼叫
Person.builder(). name("Adam Savage").city("San Francisco"). job("Mythbusters").job("Unchained Reaction").build();
更多說明參考Builder
- @SneakyThrows:
自動拋受檢異常,而無需顯式在方法上使用throws語句 - @Synchronized:
用在方法上,將方法宣告為同步的,並自動加鎖,而鎖物件是一個私有的屬性lock或 LOCK,而java中的synchronized關鍵字鎖物件是this,鎖在this或者自己的類物件上存在副作用,就是你不能阻止非受控程式碼去鎖this或者類物件,這可能會導致競爭條件或者其它執行緒錯誤 - @Getter(lazy = true):
可以替代經典的Double Check
Lock樣板程式碼 - @Log:
根據不同的註解生成不同型別的log物件
下面來實戰一番:
get技能:
每個類下的所有方法我們可以在Android studio中的Structure中看到
首先是@Data註解
然後是@Value註解
@Value需要和@NonNull一起使用 不是會報錯 因為Get方法可能獲取為Null值
截圖太多了!我就不給大家一一示範了!更多的大家自己去探索吧
- val示例
public static void main(String[] args) {
val lists = new ArrayList<String>();
//=>相當於
- 列表內容
final List<String> lists2 = new ArrayList<>();
}
- @NonNull示例
public void notNullExample(@NonNull String string) {
string.length();
}
//=>相當於
public void notNullExample(String string) {
if (string != null) {
string.length();
} else {
throw new NullPointerException("null");
}
}
- @Cleanup示例
public static void main(String[] args) {
try {
@Cleanup InputStream inputStream = new FileInputStream(args[0]);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//=>相當於
InputStream inputStream = null;
try {
inputStream = new FileInputStream(args[0]);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
- @Builder示例
@Builder
public class BuilderExample {
private String name;
private int age;
@Singular
private Set<String> occupations;
public static void main(String[] args) {
BuilderExample test = BuilderExample.builder().age(11).name("test").build();
}
}
差不多就是這些了,詳細的請移步官網,很So easy!
2.騷年技巧二之Java 8 lambda表示式
- 事件
//=>使用前
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("TAG","事件的匿名內部類");
}
});
//=>使用後
button.setOnClickListener(view-> Log.d(TAG,"按鈕被點選,lambda表示式"));
- 迴圈
//=>使用前
for (Goods goods: GoodsList) {
Log.i("tag",goods.getName());
}
//=>使用後
// 使用 lambda 表示式以及函式操作(functional operation)
GoodsList.forEach((Goods ) -> Log.i("tag",goods.getName()); "));
- 開啟執行緒
//=>使用前
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8, too much code for too little to do");
}
}).start();
//=>使用後
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
當然不止這點!詳情請百度Java8 lambda表示式10個示例
3.騷年技巧三之Instant run
在Android Studio2.0的推出逆天功能Instant Run
使用 instant run,在第一次執行之後,不用重新build就能在UI可以直接顯示修改效果!當然現在只能在真機上,但是它不僅能夠在UI可以直接顯示效果,還能重新整理修改程式碼邏輯,樣式。。。。不用再苦苦等build了,節約生命呀!
下面我們開始使用 instant run吧!
- 首先要升級到Android Studio 2.0
- 升級android tools build
instant run功能之後再android tools build 的2.0.0的版本才可以使用。
需要在build.gradle中指定
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-alpha1'
}
}
- 設定instant Run
當然升級到2.0以上它是自動開啟的,當我們的工具欄上多出一個閃電圖示,你就開始擁有了閃電般的除錯速度了!
當然更多的詳情還是自己百度吧!