effective java——31用例項域代替序數
1,永遠不要根據列舉的序數匯出與它關聯的值,而是要將他儲存在一個例項域中。(ordinal())
public enum Ensemble {
SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET;
public int numberOfMusicians() {
return ordinal()+1;
}
}
無法新增
所以可以採用以下方式:
public enum Ensemble {
SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8),
DOUBLE_QUARTET(8), NONET(9), DECTET(10), TRIPLE_QUARTET(12);
private final int numberOfMusicians;
Ensemble(int size) {
this.numberOfMusicians = size;
}
public int numberOfMusicians() {
return numberOfMusicians;
}
}
相關推薦
effective java——31用例項域代替序數
1,永遠不要根據列舉的序數匯出與它關聯的值,而是要將他儲存在一個例項域中。(ordinal()) public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public
第三十一條 用例項域代替序數
列舉中有個方法, ordinal()方法,它的值是列舉常量在型別中的數字位置,如果把列舉裡面的內容物件看成是一個數組,那麼,這個值就是索引。 public enum Ensemble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEX
effective java——32用EnumSet代替位域
什麼是位域?為什麼用到它?先來看一個例子: public class Test { public static final byte STYLE_BOLD = 1<<0; // 1 public static final byte STYLE_ITALIC = 1<<1; // 2
Effective Java-考慮用靜態工廠方法代替構造器
public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } //使用構造器 Boolean b1 = new Boolean(true); //使用靜態工廠方
[Effective Java]考慮用靜態工廠方法代替構造器
本文主要介紹如何使用靜態工廠方法已經在那種場合來使用這種方式代替構造方法。 眾所周知,對於類而言,我們為了獲得一個類的例項物件,通常情況下會提供一個公有的(public) 的構造器。當然
《Effective Java》用私有構造器或者列舉型別強化SingleTon屬性
我們耳熟能詳的單例有懶漢式、餓漢式等 例如下面這段的餓漢式 用private修飾構造方法,防止外界通過無參的構造方法直接建立物件,但是這樣還是可以通過反射來攻擊,造成程式碼的不安全,可以考慮設定一個變數,在建立第二個物件的時候丟擲一個自定義的異常。 這
讀書筆記-《Effective Java》第1條:考慮用靜態工廠方法代替構造器
優勢 它們有名稱 構造器沒有名稱, 當一個類有多個構造器的時候就不容易分清楚哪個是自己想要的。 不必在每次呼叫它們的時候都建立一個新物件 如果新建立的物件的成員屬性是可以重用的, 那麼可以先把第一次建立的物件儲存起來,以後想用的時候就不用
Effective Java -- 用靜態工廠方法來代替構造器
本文是 《Effective Java》的讀書筆記,由於是Java進階書,難免會有理解的偏差,發現有錯誤,非常歡迎能提出來,本人不勝感激! 為什麼要考慮使用靜態工廠方法代替構造器呢?本書中說明了以下的優點: (1)靜態工廠方法能提供一個可讀性很高的名稱來
effective java 第6章 列舉和註解 第30條 用enum代替int常量
列舉是什麼? 列舉型別是指由一組固定的常量組成合法值的型別。列舉型別是解決常量int的另一種解決方案。 列舉型別的簡單示例: public enum AlarmPoints {STAIR1,STAIR2,LOBBY,OFFICE1,OFFICE2,OFFI
Java 《Effective Java 中文版 第2版》學習筆記 遇到多個構造器時要考慮用構建器
fec 利用 客戶端代碼 except car beans pri 很好 種類 靜態工廠和構造器有個共同的局限性:它們都不能很好地擴展到大量的可選參數。 當一個類中有若幹個必選屬性和多個可選屬性時,采用重疊構造器模式、JavaBeans模式或者Builder模式,但
【讀書筆記 - Effective Java】02. 遇到多個構造器參數時要考慮用構建器
wid style ive tex 解決 相關 class javabeans stat 類有多個可選參數的解決方案:1. 重疊構造器模式可行,但是當有許多參數的時候,客戶端代碼會很難編寫,並且仍然較難以閱讀。2. JavaBeans模式,調用一個無參構造器來創造對象,然後
【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器
返回對象 boolean 簡化 將不 其他 種類型 bigint color pre 類可以提供一個靜態方法,返回類的一個靜態實例,如Boolean包裝類的一個獲取實例的靜態方法 1 public static Boolean valueOf(boolean b) { 2
Effective-Java(Item 4)之給非例項類設定一個私有構造器
只由靜態欄位和靜態方法組成的類,像工具類,這些類不能被例項化,只通過類直接呼叫靜態方法和使用靜態欄位,就將該類的構造方法設為私有的,jdk中java.util.Arrays、java.util.Collections和java.lang.Math都遵循這個原則 public clas
Effective Java 第三版讀書筆記——條款4:使用私有構造器來強制實現不可例項化
偶爾你會想寫一個類,這個類只是一組靜態方法和靜態屬性。 這樣的類獲得了不好的名聲,因為有些人濫用這些類而避免以面向物件的方式思考,但是它們有時候確實有實際的用處: 它們可以被用來聚集一組建立在基礎型別或陣列之上的相關方法,例如 java.lang.Math 或 java.util
第三十三條 用EnumMap代替序數索引
之前提過,我們可能會用ordinal()方法來求索引,代替一些陣列的索引,例如數種的例子,表示一些植物的歸類 public class Herb { public enum Type { ANNUAL, PERENNIAL, BIENNIAL }
Effective Java 泛型 第28條:利用有限制萬用字元來提升API的靈活性
如第25條所述,引數化型別是 不可變的(invariant)。換句話說,對於任何兩個截然不同的型別tyle1和type2來說,List< Type1>既不是List< Type2>的子型別,也不是他的超型別。雖然List< Stri
Java物件和例項的關係、Java資料封裝、Java繼承和多型、Java抽象類和介面、Java靜態欄位和方法、Java包和作用域、Java的classpath和jar、Java核心類
Java物件和例項的關係: 面向物件程式設計(Object-Oriented Programming),是對現實世界建立計算機模型的一種方法。 class是物件的模板,它定義瞭如何建立例項,class的名字就是資料型別。一個class裡可以有多個欄位(field),欄位用
Effective Java 第三版讀書筆記——條款3:使用私有構造器來強制實現不可例項化
偶爾你會想寫一個類,這個類只是一組靜態方法和靜態屬性。 這樣的類獲得了不好的名聲,因為有些人濫用這些類而避免以面向物件的方式思考,但是它們有時候確實有實際的用處: 它們可以被用來聚集一組建立在基礎型別或陣列之上的相關方法,例如 java.lang.Math
讀書筆記-《Effective Java》第2條:遇到多個構造器引數時要考慮用構建器
當一個類有很多個屬性時,建立物件的時候要麼就先建立個物件然後給物件賦值,要麼就根據業務需要寫很多個構造器, 這樣的構造器可讀性差。就算用靜態工廠也得寫很多個,這時候就可以用構建器了。 例如: package org.test; public class People { pr
Effective Java 3rd 條目16 在公開類使用訪問方法而不是公開域
偶然地你可能忍不住編寫一個退化的類,除了把例項域分組以外不作為任何目的: // 像這樣的退化的類不應該是公開的! class Point { public double x; public double y; } 因為這樣的類的資料域可以直接訪問,所以這些類沒有提