1. 程式人生 > >使用泛型實現返回不同型別的物件

使用泛型實現返回不同型別的物件

本次功能的實現場景:讀取Yaml配置檔案,然後將其中的資訊轉換成指定的物件。
在這裡定義了一個Yaml的工具類,希望工具類的返回物件型別可以根據呼叫方法時傳入的物件型別來定義。

通過泛型實現

工具類:

public class YamlUtil {
    public <T> T readNodeFromYml(Class<T> type) throws YamlException, FileNotFoundException{

        File dumpFile = new File(System.getProperty("user.dir"
) + "/src/main/conf/searchNode.yml"); YamlReader reader = new YamlReader(new FileReader(dumpFile)); return reader.read(type); } }

呼叫工具類

public static void main(String[] args) throws Exception {

        YamlUtil util=new YamlUtil();

        //讀取yaml檔案
        SearchNode searchNode = util.readNodeFromYml(SearchNode.class);
        TestStrategy strategy = searchNode.getTestStrategy();
        int
num=strategy.add(2, 3); System.out.println(num); }

通過<T> 宣告告訴JVM返回值定義一個泛型 T
這裡的T只是個佔位符的效果,26個字母隨便寫哪個字母都可以,但一定要是和< >裡面相同的字母,這裡使用T。
工具類傳入的引數也是T型別的,通過Class<T> type定義一個T型別的引數,最終此方法的作用就成了:傳入一個指定型別的物件,然後讀取Yaml配置檔案後再返回一個此型別的物件。

使用泛型和使用Object有何不同

在Java SE 1.5之前,沒有泛型的情況的下,通過對型別Object的引用來實現引數的“任意化”,“任意化”帶來的缺點是要做顯式的

強制型別轉換,而這種轉換是要求開發者對實際引數型別可以預知的情況下進行的。對於強制型別轉換錯誤的情況,編譯器可能不提示錯誤,在執行的時候才出現異常,這是一個安全隱患。
泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高程式碼的重用率。

由此可見,使用泛型,有2個好處:

  1. 不需要做強制型別轉換

  2. 編譯時更安全。