1.過載最好是有層次的繼承關係,否則不要寫的太「相似」,盡量少用過載,多重寫,但是要考慮復用性
publicclass
card
public
static string classify(list<?>list)
public
static string classify(collection<?>collection)
public
static
void
main(string args) ;
for (collection<?>c : collections)
}}
這裡會編譯通過,但是都是unknown,因為程式不知道哪個合適,只能找乙個一定合適的,因為都是collection的子類。
這裡我們可以變體一下就ok了
publicstatic string classify(collection<?>collection)
2.永遠不要返回null,要返回空的集合或者陣列,這點真是很常見的錯誤習慣
- 一是增加了未處理null的風險
- 二是讓處理的邏輯看起來很奇怪,為什麼null,null了為什麼還要進來處理
對於集合我們可以為了效能,返回乙個不可變的集合。下面的**就是這樣做的,使用了 collections.emptylist 方法。如果你要返回乙個 set,可以使用 collections.emptyset ;如果要返回 map,則使用 collections.emptymap 。但是請記住,這 是乙個優化,很少需要它。如果你認為你需要它,測量一下前後的效能表現,確保它確實有幫助
public listgetcards()
陣列的情況與集合的情況相同。 永遠不要返回 null,而是返回長度為零的陣列。 通常,應該只返回乙個正確長 度的陣列,這個長度可能為零。 如果你認為分配零長度陣列會損害效能,則可以重複返回相同的零長度陣列,因為所有零長度陣列都是不可變的:
privatestatic
final card empty_card_array = new card[0];
public
card getcards()
3.optional的一點用法
publicstatic
extends comparable> optionalmax(collectionc)
e result = null
;
for(e e : c)
}return
optional.of(result);
}
publicstatic
void
main(string args)
optional在編譯時給null是會編譯失敗的,並且上面的可以用下面乙個替代。
publicstatic
extends comparable> optionalmax1(collectionc)
4.可以實現iterable介面,這樣所有類都能迭代操作
5.對於任何需要精確答案的計算,不要使用 float 或 double 型別。如果希望系統來處理十進位制小數點,並且 不介意不使用基本型別帶來的不便和成本,請使用 bigdecimal。使用 bigdecimal 的另乙個好處是,它可以完全控制 捨入,當執行需要捨入的操作時,可以從八種捨入模式中進行選擇。如果你使用合法的捨入行為執行業務計算,這將 非常方便。如果效能是重要的,那麼你不介意自己處理十進位制小數點,而且數值不是太大,可以使用 int 或 long。 如果數值不超過 9 位小數,可以使用 int;如果不超過 18 位,可以使用 long。如果數量可能超過 18 位,則使用 bigdecimal。
幾個C 需要注意的小地方
1 引用在宣告時必須要定義 2 auto不能自動推導引用,需要顯式宣告 3 可以顯示定義預設的建構函式和析構函式,需要在後面加 default關鍵字 4 static 關鍵字標示的成員變數必須在類外定義 5 const關鍵字標示的成員變數可以在初始化列表或者類外定義 但不能宣告定義 6 計算機會自動...
「大」北京「小」地方
北京太大,光世界遺產就無數,逛在北京的人,看慣了北京的大,卻常常忽視它的 小 給大家推薦幾處值得一去的 小地方 給您的北京生活增添一些新的樂趣。北京值得一去的地方太多,大到世界遺產名錄,小到國家級的文物古蹟,呆久了,誰也沒心思天天去,倒是一些不惹人注意的小地方,閒暇的時候走一走,可以平添一些樂趣 一...
也說說「小地方來的」
梁寧講過乙個段子,大致如下 某日,她和乙個朋友從北京去上海公幹,倆人興致勃勃約著一同嘗試磁懸浮。下來後打車,倆人興奮不已地在計程車上議論個不休。稍頃,篤篤定定開著車的司機發話了 小地方來的吧?梁寧這傢伙學這個段子活靈活現,讓我一聽就忘不了,以至於多次轉述給他人聽。這次,被planeboy和lucy巧...