[英]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
}
}
其中BarImpl
是Bar
的子类
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.