java中的ResultTransformer接口

时间:2015-06-11 06:25:14

标签: java interface

hibernate中有以下界面。

package org.hibernate.transform;

public interface ResultTransformer extends Serializable {
    public Object transformTuple(Object[] tuple, String[] aliases);

    public List transformList(List collection);
}

在我的项目中,我需要对结果进行一些转换,这与hibernatedatabase无关。我想创建一个像

这样的界面
public interface ResultTranformer<T>{
    public T transform(T t);
}

并实施它。

为了不创建另一个接口,是否有可能实现hibernate为我们提供的接口?它会误导另一位开发人员吗?

2 个答案:

答案 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不同,或者如果不是,您可能希望将来能够对其进行更改。