当我所有的都是T时,如何返回Interface <T>的实例? - java

我有一个界面:

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…