Gra*_*Lea 3 generics reflection scala instantiation manifest
我正在做一些WebDriver + PageObject的东西.
(如果您不熟悉PageObjects,这是一种模式,您有一个类代表您网站上的每个页面,它使用域语言公开页面的所有功能,从测试中隐藏HTML内容.)
我想要变得懒惰,并且在我的抽象Page类中有一个'submit'方法,我的所有其他Pages都扩展了.我也希望这个方法能够新建下一个Page子类并返回它.
这是我在Page类中的内容:
def submitExpecting[P <: Page[P]](implicit m: Manifest[_]): P = {
driver.findElement(By.xpath("//input[@type='submit']")).click
m.erasure.getConstructor(classOf[WebDriver]).newInstance(driver).asInstanceOf[P]
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何称呼它:
val userHomePage = userSignupPage
.login("graham")
.acceptTermsAndConditions
.submitExpecting[UserHomePage]
Run Code Online (Sandbox Code Playgroud)
编译这个,我得到:
error: could not find implicit value for parameter m: Manifest[_]
.submitExpecting[UserHomePage]
Run Code Online (Sandbox Code Playgroud)
我以为自己很聪明,但显然我不是.;) 我究竟做错了什么?
您需要使您Manifest
与类型参数相关,即
def submitExpecting[P <: Page[P]](implicit m: Manifest[P]): P
Run Code Online (Sandbox Code Playgroud)