2012-07-04 38 views
0

返回泛型類型的對象,我有2類:如何在靜態方法

public class Super { 

    public static <T> T bar(Class<T> clazz){ 

     try { 
      return (T)(clazz.newInstance()); 
     } catch (IllegalAccessException e) {   
      e.printStackTrace(); 
     } catch (InstantiationException e) {   
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

public class Sub extends Super{ 

    public static void main(String[] args){ 
     Sub s = Sub.bar(Sub.class); 

    } 
} 

現在我不想用Class<T> clazzbar設置了一個param,所以我如何返回泛型類型T,謝謝。

+0

注意:演員不是必需的 – Puce

+2

爲什麼你不想傳遞類對象作爲bar的參數? – Puce

回答

2

你不能。泛型只是編譯時,並且不能用於運行時。因此,你會提供Class clazz爲了在運行時知道T.

1

提供Class實例來創建新對象沒有任何錯誤。

如果您的代碼需要創建對象或通常在某些類上運行,則應通過實例。此操作與其他對象的用法沒有區別。泛型應該讓事情變得更容易,並確保類型安全。所以在這種情況下,只能通過對bar類型的靜態方法創建巫師類的限制,通過對泛型參數設置一些限制。

順便說一句。

你應該調用靜態方法從類實現,而不是Sub.bar(Sub.class)你應該有Super.bar(Sub.class)