2013-03-05 42 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>();