2015-12-17 55 views
1

我已經創建了一個函數通用方法調用混亂

public <T> void someFunction(T object) { 
    object.someMethod(); 
} 

我有具有相同的someMethod()函數定義兩個類。我必須通過傳遞參數來調用函數,這兩個類的對象取決於提供的輸入。

+0

什麼問題;你有什麼問題? –

+0

我必須根據提供的輸入值調用兩個類的函數。一個類是內置的,另一個是用戶定義的一個 –

回答

5

由於T沒有類型邊界,因此編譯器無法知道該參數是否被具有someMethod方法的類替換。

添加類型限制:有someMethod實現該接口

pubic <T extends HasSomeMethod> void someFunction(T object) { 
    object.someMethod(); 
} 

哪裏HasSomeMethod是包含someMethod方法的接口,和兩個班。 (它也將工作,如果HasSomeMethod是一個超一流的兩類,並且它包含someMethod方法(無論是抽象的或沒有)

編輯:

包裝的PreparedStatement的一個例子:

public class MyStatement implements HasSomeMethod 
{ 
    PreparedStatement stmt; 

    public MyStatement (PreparedStatement stmt) { 
     this.stmt = stmt; 
    } 

    public void someMethod() 
    { 
     stmt.someMethod(); 
    } 
} 

現在,如果你有一個PreparedStatement比如,你可以寫:

PreparedStatement ps = ... 
MyStatement my = new MyStatement(ps); 

,並通過my到您的someFunction方法。

+0

一個對象是java庫類和另一個用戶定義的類。所以第一個類是一個編譯代碼。那麼我們如何才能爲這兩個類實現相同的接口 –

+1

@AkhilSudhakaran也許你可以用實現接口的第二個用戶定義的類來包裝庫類。你能否詳細解釋一下 – Eran

+0

。我只是一個初學者。用例如PreparedStatement構建的類和MyStatement作爲用戶定義的類 –