hibernate中有以下界面。
package org.hibernate.transform;
public interface ResultTransformer extends Serializable {
public Object transformTuple(Object[] tuple, String[] aliases);
public List transformList(List collection);
}
在我的项目中,我需要对结果进行一些转换,这与hibernate
或database
无关。我想创建一个像
public interface ResultTranformer<T>{
public T transform(T t);
}
并实施它。
为了不创建另一个接口,是否有可能实现hibernate为我们提供的接口?它会误导另一位开发人员吗?
答案 0 :(得分:1)
你可以使用java.util.function.Function接口来实现这个目的,它意味着改变一些东西:
Function<YourType, YourType> transformer = new Function<YourType, YourType>() {
@Override YourType apply(YourType input) {
// perform transformation
}
}
或仅仅通过lambda表达式
Function<YourType, YourType> transformer = (YourType input) -> {
// perform transformation
}
具有相同名称的接口,如库中的某些东西,可能会使其他人感到困惑。
答案 1 :(得分:1)
除了通用库,例如Guava或Apache Commons(当然还有Java API的大多数部分),您不应该在应用程序使用库的上下文之外使用它们的类。
这样可以保持对库的依赖,在本例中是Hibernate,小型和本地。这意味着您是否要将用于特定目的的库更改为其他版本或不同的库。您只需要更改实际上与库完成的任务有关的代码。
此外,您不会将您的代码的读者(其他开发人员)混淆为认为您的类将在以后与Hibernate一起使用。
最后,制作界面并不算太多。如果非常本地使用该接口,则应始终创建一个完整的界面,并正确解释进出的内容。您的界面可能对错误处理的要求与Hibernate不同,或者如果不是,您可能希望将来能够对其进行更改。