Java之道:14個(gè)寫Java 的好習(xí)慣
胖虎和朋友原創(chuàng)的視頻教程有興趣的可以看看:
(文末附課程大綱)
作者: 國(guó)濤i
來源: blog.csdn.net/weixin_44912855/article/details/120866194
Part1定義配置文件信息
有時(shí)候我們?yōu)榱私y(tǒng)一管理會(huì)把一些變量放到y(tǒng)ml配置文件中
例如
用 @ConfigurationProperties 代替@Value
使用方法
定義對(duì)應(yīng)字段的實(shí)體
@Data
//?指定前綴
@ConfigurationProperties(prefix?=?"developer")
@Component
public?class?DeveloperProperty?{
????private?String?name;
????private?String?website;
????private?String?qq;
????private?String?phoneNumber;
}
使用時(shí)注入這個(gè)bean
@RestController
@RequiredArgsConstructor
public?class?PropertyController?{
?
????final?DeveloperProperty?developerProperty;
?
????@GetMapping("/property")
????public?Object?index()?{
???????return?developerProperty.getName();
????}
}
Part2用@RequiredArgsConstructor代替@Autowired
我們都知道注入一個(gè)bean有三種方式哦(set注入, 構(gòu)造器注入, 注解注入),spring推薦我們使用構(gòu)造器的方式注入Bean
我們來看看上段代碼編譯完之后的樣子
RequiredArgsConstructor:lombok提供
Part3代碼模塊化
阿里巴巴Java開發(fā)手冊(cè)中說到每個(gè)方法的代碼不要超過50行(我沒記錯(cuò)的話)
在實(shí)際的開發(fā)中我們要善于拆分自己的接口或方法, 做到一個(gè)方法只處理一種邏輯, 說不定以后某個(gè)功能就用到了, 拿來即用
Part4拋異常而不是返回
在寫業(yè)務(wù)代碼的時(shí)候,經(jīng)常會(huì)根據(jù)不同的結(jié)果返回不同的信息,盡量減少返回,會(huì)顯得代碼比較亂
反例
正例
Part5減少不必要的db
盡可能的減少對(duì)數(shù)據(jù)庫的查詢
舉例子
刪除一個(gè)服務(wù)(已下架或未上架的才能刪除)
之前有看別人寫的代碼,會(huì)先根據(jù)id查詢?cè)撚涗?,然后做一些判?/p>
反例
正例
Part6不要返回null
反例
正例
別處調(diào)用方法時(shí),避免不必要的空指針
Part7if else
不要太多了if else if
可以試試策略模式代替
Part8減少controller業(yè)務(wù)代碼
業(yè)務(wù)代碼盡量放到service層進(jìn)行處理,后期維護(hù)起來也好操作而且美觀
反例
正例
Part9利用好Idea
目前為止市面上的企業(yè)基本都用idea作為開發(fā)工具了吧
舉一個(gè)小例子
idea會(huì)對(duì)我們的代碼進(jìn)行判斷,提出合理的建議
例如:
它推薦我們用lanbda的形式代替
點(diǎn)擊replace
Part10基礎(chǔ)問題
map遍歷
HashMap?map?=?new?HashMap<>();
map.put("name",?"du");
for?(String?key?:?map.keySet())?{
????String?value?=?map.get(key);
}
map.forEach((k,?v)?->?{
});
//?推薦
for?(Map.Entry?entry?:?map.entrySet())?{
}
optional 判空
//獲取子目錄列表
public?List?getChild(String?pid)? {
????????if?(V.isEmpty(pid))?{
????????pid?=?BasicDic.TEMPORARY_DIRECTORY_ROOT;
????}
????CatalogueTreeNode?node?=?treeNodeMap.get(pid);
????return?Optional.ofNullable(node)
????????????.map(CatalogueTreeNode::getChild)
????????????.orElse(Collections.emptyList());
}
Part11判斷元素是否存在
hashSet而不是list
list判斷一個(gè)元素是否存在的代碼
ArrayList?list?=?new?ArrayList<>();
?
//?判斷a是否在list中
?
for?(int?i?=?0;?i????if?("a".equals(elementData[i])){
??????return?i;
???}
}
由此可見其復(fù)雜度為On
而hashSet底層采用hashMap作為數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲(chǔ),元素都放到map的key(即鏈表中)
HashSet?set?=?new?HashSet<>();
?
//?判斷a是否在set中
?
int?index?=?hash(a);
?
return?getNode(index)?!=?null
胖虎聯(lián)合兩位大佬朋友,知名培訓(xùn)機(jī)構(gòu)講師和科大訊飛架構(gòu),聯(lián)合打造了《Java架構(gòu)師成長(zhǎng)之路》的視頻教程。完全對(duì)標(biāo)外面2萬左右的培訓(xùn)課程。
除了基本的視頻教程之外,還提供了超詳細(xì)的課堂筆記,以及源碼等資料包..
目前課程內(nèi)測(cè)活動(dòng)價(jià):999元,后續(xù)可能會(huì)上調(diào)至 2999元
點(diǎn)擊下方超鏈接查看詳情
(或者點(diǎn)擊文末閱讀原文):
(點(diǎn)擊查看)? 2023年,最新Java架構(gòu)師成長(zhǎng)之路 視頻教程!
以下是課程大綱,大家可以長(zhǎng)按識(shí)別查看!


