我有一个界面:
public interface ILoginResult<T> {
public T get();
}
我有一个LoginPage
对象:
public class LoginPage<T> {
...
public ILoginResult<T> login(...) {
...
}
}
我也有一些登录页面对象,这些login
可能导致的位置。他们实现了接口:
public class Page1 extends PageBase implements ILoginResult<Page1> {
...
}
这些是login
方法必须返回的对象。返回的对象类型应与创建LoginPage
时指定的类型匹配。
我不确定如何从类型T
转到ILoginResult<T>
的实例。我可以创建实现T
的特定类型的对象的实例,但这不满足返回类型。我是在尝试做一些没有通用的标准实现方法的事情,还是只是缺少明显的事情?
附加数据:
这有点测试自动化。 LoginPage是一个页面对象,可以根据各种设置登录到多个不同页面之一。 T
代表这些着陆页之一,它们是PageBase
超类的所有子类。
在我的旧代码中,login
方法返回了PageBase
的特定子类。我将登录到页面-说Page1
-这样:
LoginPage loginPage = new LoginPage(...);
Page1 page1 = (Page1) loginPage.login(parameters);
我被指示引入更多的类型安全性,并避免使用上述接口进行强制转换。大概代码如下:
LoginPage<Page1> loginPage = new LoginPage<Page1>(...);
Page1 page1 = loginPage.login(parameters);
我的困难在于创建和返回满足返回类型ILoginresult<T>
的这些对象的实例。我可以创建实现Page1
的实例,例如ILoginResult<Page1>
,但这太具体了。
参考方案
您是否尝试仅创建对象?
public class LoginPage<T> {
public ILoginResult<T> login(...) {
final T t = ...
return new ILoginResult<T>() {
@Override
public T get() {
return t;
}
};
}
}
无法从ArrayList <String>转换为List <Comparable> - java当我写下面的代码时,编译器说 无法从ArrayList<String>转换为List<Comparable>private List<Comparable> get(){ return new ArrayList<String>(); } 但是当我用通配符编写返回类型时,代码会编译。private List&l…
合并List <T>和List <Optional <T >> - java鉴于: List<Integer> integers = new ArrayList<>(Arrays.asList( 10, 12 )); List<Optional<Integer>> optionalIntegers = Arrays.asList( Optional.of(5), Optional.em…
在集成测试阶段执行Maven模块 - java我想启动一个同级Maven 3模块,该模块在我的一个Maven模块中充当应用程序服务器,以对系统运行集成测试。我的maven项目看起来与此类似:父模块模块A模块B现在,我想在Maven的集成前测试阶段中启动“模块A”,然后运行模块B中包含的所有集成测试。我设法在模块B中运行了集成测试,但是没有找到“光滑”的方法在集成前测试阶段启动模块B。最佳做法是什么?使用…
在Maven构建之前如何运行课程? - java为什么以下原因导致构建失败?我创建了一个应该在maven开始执行构建之前运行的类。 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.5.…
Java Applet的URLConnection与PHP无效 - java我已经研究了Oracle文档和示例,但仍然无法正常工作。我有一个Java Applet,它只是尝试使用URLConnection和OutputStreamWriter通过POST将文本字段发送到PHP脚本。 Java方面似乎工作正常,没有引发异常,但是PHP在我的页面上未显示任何输出。我是PHP新手,因此请耐心等待。这是相关的Java部分: try { UR…