11

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

目前的界面是这样的:

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);
}

实施

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

1 回答 1

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
    }
}

BarImpl的子类在哪里Bar

于 2013-05-23T04:45:46.253 回答