2015-06-11 30 views
1

hibernate中有以下接口。java中的ResultTransformer接口

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爲我們提供的接口?它會誤導另一個開發者嗎?

+0

是的,這是可能的。這不是通用的,雖然... –

+0

@MauricePerry Genericness在這裏並不重要,雖然它會更加方便.... – user3663882

回答

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

除了通用庫(如Guava或Apache Commons(當然還有大多數Java API的部分))之外,您不應該在應用程序使用庫的上下文之外使用它們的類。

這可以保持對你的庫的依賴,在這種情況下,Hibernate是小型和本地的。這意味着您是否要將用於特定目的的庫更改爲另一個版本或不同的庫。您只需要更改與庫實現的任務實際相關的代碼即可。

另外,您不會將您的代碼(其他開發人員)的讀者混淆爲認爲您的類將在稍後用於Hibernate。

最後,做一個界面並不是太多的工作。如果接口不是非常本地使用,則應該始終創建一個完整的接口,並適當解釋進出的內容。你的界面在錯誤處理方面可能會有不同的要求,或者如果不是這樣的話,你可能希望將來能夠改變它。