我坚持使用匿名方法的java传统, 我正在使用第三方库,它具有通用接口,将table_name作为其泛型类型
像
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 :(得分: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 :(得分: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> ();