lqxue

          常用鏈接

          統計

          book

          tools

          最新評論

          [收集]java5 的一些的性

          @SuppressWarnings與前兩個注釋有所不同,你需要添加一個參數才能正確使用,這些參數值都是已經定義好了的,我們選擇性的使用就好了,參數如下:

          參數

          語義

          deprecation

          使用了過時的類或方法時的警告

          unchecked

          執行了未檢查的轉換時的警告,例如當使用集合時沒有用泛型 (Generics) 來指定集合保存的類型

          fallthrough

          Switch 程序塊直接通往下一種情況而沒有 Break 時的警告

          path

          在類路徑、源文件路徑等中有不存在的路徑時的警告

          serial

          當在可序列化的類上缺少 serialVersionUID 定義時的警告

          finally

          任何 finally 子句不能正常完成時的警告

          all

          關于以上所有情況的警告

             

          Override

            Override表示,它所注釋的方法應該重寫超類中具有相同簽名的方法:
          @Override

            public int hashCode() {

            ...

            }


            看上面的例子,如果沒有在hashCode中將“C”大寫,在編譯時不會出現錯誤,但是在運行時將無法像期望的那樣調用該方法。通過添加Override標簽,編譯器會提示它是否真正地執行了重寫。

            在超類發生改變的情況中,這也很有幫助。如果向該方法中添加一個新參數,而且方法本身也被重命名了,那么子類將突然不能編譯,因為它不再重寫超類的任何東西。

          枚舉

            


            enum非常像public static final int聲明,后者作為枚舉值已經使用了很多年。對int所做的最大也是最明顯的改進是類型安全――您不能錯誤地用枚舉的一種類型代替另一種類型,這一點和int不同,所有的int對編譯器來說都是一樣的。除去極少數例外的情況,通常都應該用enum實例替換全部的枚舉風格的int結構。

            枚舉提供了一些附加的特性。EnumMap和EnumSet這兩個實用類是專門為枚舉優化的標準集合實現。如果知道集合只包含枚舉類型,那么應該使用這些專門的集合來代替HashMap或HashSet。

            大部分情況下,可以使用enum對代碼中的所有public static final int做插入替換。它們是可比的,并且可以靜態導入,所以對它們的引用看起來是等同的,即使是對于內部類(或內部枚舉類型)。注意,比較枚舉類型的時候,聲明它們的指令表明了它們的順序值。

            “隱藏的”靜態方法

            兩個靜態方法出現在所有枚舉類型聲明中。因為它們是枚舉子類上的靜態方法,而不是Enum本身的方法,所以它們在java.lang.Enum的javadoc中沒有出現。

            第一個是values(),返回一個枚舉類型所有可能值的數組。

            第二個是valueOf(),為提供的字符串返回一個枚舉類型,該枚舉類型必須精確地匹配源代碼聲明。

            方法

            關于枚舉類型,我們最喜歡的一個方面是它可以有方法。過去您可能需要編寫一些代碼,對public static final int進行轉換,把它從數據庫類型轉換為JDBC URL。而現在則可以讓枚舉類型本身帶一個整理代碼的方法。下面就是一個例子,包括DatabaseType枚舉類型的抽象方法以及每個枚舉實例中提供的實現:

            
            public enum  DatabaseType {

            ORACLE {

            public String getJdbcUrl() {...}

            },

            MYSQL {

            public String getJdbcUrl() {...}

            };

            public abstract String getJdbcUrl();

            }


            現在枚舉類型可以直接提供它的實用方法。例如:

            DatabaseType dbType = ...;

            String jdbcURL = dbType.getJdbcUrl();

            要獲取URL,必須預先知道該實用方法在哪里。

          可變參數(Vararg)

           Log.log(String code, String... args)
          協變返回

            協變返回的基本用法是用于在已知一個實現的返回類型比API更具體的時候避免進行類型強制轉換。在下面這個例子中,有一個返回Animal對象的Zoo接口。我們的實現返回一個AnimalImpl對象,但是在JDK 1.5之前,要返回一個Animal對象就必須聲明。:

            
              public interface Zoo  {

            public Animal getAnimal();

            }

            public class ZooImpl implements Zoo {

            public Animal getAnimal(){

            return new AnimalImpl();

            }

            }
            協變返回的使用替換了三個反模式:
          • 直接字段訪問。為了規避API限制,一些實現把子類直接暴露為字段:

                  ZooImpl._animal
                 另一種形式是,在知道實現的實際上是特定的子類的情況下,在調用程序中執行向下轉換:



            

          ((AnimalImpl)ZooImpl.getAnimal()).implMethod();

            



              
          • 我看到的最后一種形式是一個具體的方法,該方法用來避免由一個完全不同的簽名所引發的問題:


            

          ZooImpl._getAnimal();

            這三種模式都有它們的問題和局限性。要么是不夠整潔,要么就是暴露了不必要的實現細節。

            協變

            協變返回模式就比較整潔、安全并且易于維護,它也不需要類型強制轉換或特定的方法或字段:

            public AnimalImpl getAnimal(){

            return new AnimalImpl();

            }

            使用結果:

            ZooImpl.getAnimal().implMethod();

          參考:http://www.linuxpk.com/43834.html

          posted on 2007-10-23 17:15 lqx 閱讀(789) 評論(0)  編輯  收藏 所屬分類: java

          主站蜘蛛池模板: 遵义市| 铜川市| 宜章县| 香港 | 牡丹江市| 高阳县| 噶尔县| 林口县| 商洛市| 奈曼旗| 巧家县| 额敏县| 信丰县| 安义县| 治县。| 潼南县| 沙田区| 额敏县| 宜宾市| 沂南县| 商城县| 贵港市| 丰城市| 静海县| 丹凤县| 滕州市| 元朗区| 清丰县| 积石山| 百色市| 德化县| 宽城| 华安县| 黔江区| 宁强县| 保亭| 河曲县| 崇仁县| 平顶山市| 吴忠市| 三河市|