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

时间:2013-05-23 04:41:58

标签: java generics 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 }
}

1 个答案:

答案 0 :(得分:14)

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

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

的子类