2016-07-11 6 views
-2

ich diesen Code in C#:Generics Methode Verwendung

private static T GetPage<T>() where T : new() 
{ 
    var page = new T(); 
    PageFactory.InitElements(Browser.Driver, page); 
    return page; 
} 
public static AboutPage About 
{ 
    get { return GetPage<AboutPage>(); } 
} 

Ich habe versucht, dies in Java zu implementieren, wie ich wirklich das Konzept gefallen, aber ich bin nicht gut mit Generika (und vor allem mit C#) . Also, das ist mein Code:

private static <T> T getPage(Class<? extends T> cls) throws Exception{ 
    T page = cls.newInstance(); 
    PageFactory.initElements(driver, page); 
    return page; 
} 
public static LoginPage Login() { 
    return LoginPage.getPage(); 
} 

Es funktioniert überhaupt nicht. Ich habe das Gefühl, dass mir die Grundlagen fehlen, daher würde ich mich über jede Hilfe und jeden Rat freuen.

+2

_Es funktioniert überhaupt nicht_ ist keine nützliche Bemerkung. Bitte erklären Sie _what_ funktioniert nicht. –

+0

@JornVernee Im folgenden Code bekomme ich: "Kann die Methode getPage()" zum Beispiel nicht auflösen. TBH, ich bin mir nicht einmal sicher, dass ich es sogar logisch umgesetzt habe. – Monstryyy

+0

Ah, ich verstehe. Aber Sie zeigen nicht die Implementierung von '' 'LoginPage.getPage()' ''. Wer eine Signatur hat, ist nicht mit der obigen Methode kompatibel. –

Antwort

1

Versuchen Sie stattdessen:

private static <T> T getPage(Supplier<? extends T> supp) { 
    T page = supp.get(); 
    PageFactory.initElements(driver, page); 
    return page; 
} 

public static LoginPage Login() { 
    return getPage(LoginPage::new); // Passing the default constructor 
} 

Hier wechseln I die Instanziierung von T von Class, zu Instanziierung von einem Supplier, da es keine Ausnahmen werfen ist.


Wenn Sie nicht Java 8 haben, würden Sie haben Ihren Code zu verwenden, und rufen wie:

getPage(LoginPage.class); 

Aber das würde auch bedeuten, mit den Ausnahmen, beschäftigen.

Verwandte Themen