2013-12-19 110 views
2

我是新來的Java和我試圖實現一個通用的方法:返回泛型類型在Java

public static <T> T login(String username,String password) 
{ 
    //... 
    return PageFactory.initElements(driver,T.class); 
} 

在這裏,我想通過泛型類的,但是當我試圖T.class我收到錯誤:

Cannot select from a type variable.

如果我做了錯誤?

+6

類型擦除阻止你做'T.class'。重新思考你的設計,也許會傳遞一個'類'這個方法。 –

+1

如果你想這樣做,你需要將這個類作爲參數傳遞;泛型的使用將避免返回對象的轉換。 – vanza

回答

6

由於type erasure在運行時間Tjava.lang.Object所以這不是一個選項。如果有T上一個實例調用getClass()雖然

public static <T> T login(String username,String password, T obj) { 
    // to get the class at run-time. 
    return PageFactory.initElements(driver,obj.getClass()); 
} 

或其他人已經指出的那樣,你可以只使用

public static <T> T login(String username,String password, Class<T> cls) { 
    // to use the Class, passed from caller. 
    return PageFactory.initElements(driver,cls); 
}