繁体   English   中英

如何在实现通用接口时返回具体类型

[英]How to return a concrete type when implementing a generic interface

我有一个接口,将由几个不同的类实现,每个类使用不同的类型和返回类型。 返回类型可以从方法泛型类型中推断出来,但是我在实现它时遇到了麻烦。

界面目前看起来像这样:

public interface TransformUtilsBase<T> {

    Class<?> transformToNhin(T request, BrokerContext brokerContext);
}

我希望Impl类看起来像:

public class TransformUtilsXCPD implements TransformUtilsBase<foo> {

    bar transformToNhin(foo request, BrokerContext brokerContext) {
        code here
    }

在impl我知道返回类型应该是什么。 在接口级别没有办法告诉。

我可以放弃一个接口,只是使用相同的方法名称制作几个类,但我想将它形式化,因为它们都被用于相同的目的。 只有类型不同。

或者我可以只使用一大类静态方法,因为它们是util操作,但是管理具有相同名称的所有方法的类以及所有必需的辅助方法(同样具有相同名称)变得笨重。

实现接口似乎是形式化功能的最佳选择,即使我无法执行静态方法。 我只是无法弄清楚如何处理返回类型。

编辑:扩展界面以显示完整示例以防止进一步混淆。 接口

public interface TransformUtilsBase<T, U> {
    Class<?> transformToNhin(T request, BrokerContext brokerContext);
    Class<?> transformToXca(U request, BrokerContext brokerContext);
}

IMPL

public class TransformUtilsXCPD implements TransformUtilsBase<Foo, Bar> {
    Baz transformToNhin(Foo request, BrokerContext brokerContext) { code here }
    Biz transformToXca(Bar request, BrokerContext brokerContext) { code here }
}

你为什么不声明返回类型的类型,像这样

public interface TransformUtilsBase<T, S> {

    S transformToNhin(T request, BrokerContext brokerContext);
}

您甚至可以将您的退货类型“绑定”为特定类型(比如Bar

public interface TransformUtilsBase<T, S extends Bar> {

    S transformToNhin(T request, BrokerContext brokerContext);
}

并且实现的类将声明为

public class TransformUtilsXCPD implements TransformUtilsBase<Foo, BarImpl> {

    BarImpl transformToNhin(Foo request, BrokerContext brokerContext) {
        //code here
    }
}

其中BarImplBar的子类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM