2013-03-05 68 views
1

我堅持使用匿名方法的java的傳統, 我使用它有一個通用的接口,這需要表名作爲其泛型類型第三方庫使用泛型值匿名方法爲perameter

TableQueryCallback<WYF_Brands> =new TableQueryCallback<WYF_Brands>() { 
    @Override 
    public void onCompleted(List<WYF_Brands> arg0, int arg1, 
     Exception arg2, ServiceFilterResponse arg3) { 
     // TODO Auto-generated method stub 
    } 
}; 

這裏WYF_Brands是我的表名。

我想是

TableQueryCallback<WYF_Users> =new TableQueryCallback<WYF_Users>() { 
    @Override 
    public void onCompleted(List<WYF_Users> arg0, int arg1, 
     Exception arg2, ServiceFilterResponse arg3) { 
     // TODO Auto-generated method stub 
    } 
}; 

其中WYF_Users是我的另一個表。

要求:我想使用這樣的方法爲我所有的表,但以可重用的方式。

我有數據庫中的表的數量,不會爲不同的表創建不同的方法。我不知道如何使用泛型,可以接受任何表名作爲參數。

另一件事是這個接口是第三方庫的一部分,所以我不能改變它,因爲它是在可執行jar文件中。

我使用java作爲編程語言。

+0

什麼是'TableQueryCallback'構造方法的簽名? – OldCurmudgeon 2013-03-05 12:45:41

+1

您的WYF_ *對象是否通過繼承共享一個共同的祖先(對象除外)?你需要在'onCompleted'方法中做什麼樣的待遇? – benzonico 2013-03-05 12:47:17

+0

@OldCurmudgeon我假設'TableQueryCallback'是一個接口,因此沒有構造函數。 – 2013-03-05 12:59:17

回答

1

這聽起來像你只是想要一個通用的方法:

public <T> TableQueryCallback<T> createTableQueryCallback() { 
    return new TableQueryCallback<T>() { 
     @Override 
     public void onCompleted(List<T> list, int arg1, 
       Exception arg2, ServiceFilterResponse arg3) { 
      // I'm assuming the implementation here would be the same each time? 
     } 
    }; 
} 

雖然我只是忍不住要創建一個名爲嵌套代替類:

private static SomeSpecificTableQueryCallback<T> implements TableQueryCallback<T> { 
    @Override 
    public void onCompleted(List<T> list, int arg1, 
      Exception arg2, ServiceFilterResponse arg3) { 
     // I'm assuming the implementation here would be the same each time? 
    } 
} 

...我不你不明白爲什麼使它匿名爲你提供任何好處。

1

我假設你有WYF_Brands,WYF_Users和所有其他表的公共基類/接口。讓它成爲WYF_Base。我也假設,這個基類/接口足以讓你實現你的通用方法。如果是這樣,那麼你可以一次這樣的實現方法:

public class CommonTableQueryCallback <T extends WYF_Base> 
    implements TableQueryCallback <T> 
{ 
    @Override 
    public void onCompleted(List <T> list, int n, 
     Exception exception, ServiceFilterResponse response) { 
     // Implement your logic here. 
     // All elements of `list` are guaranteed to extend/implement WYF_Base 
     // And compiler knows this! 

     WYF_Base e = list.get (0); // This is correct! 
    } 
} 

然後你就可以使用這個類如下所示:

TableQueryCallback <WYF_Brands> callback = 
    new CommonTableQueryCallback <WYF_Brands>();