1

我坚持使用匿名方法的 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 作为编程语言。

4

2 回答 2

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?
    }
}

...我不明白为什么将其设为匿名会在这里为您带来任何好处。

于 2013-03-05T12:48:10.970 回答
1

我假设您有通用的基类/接口WYF_BrandsWYF_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> ();
于 2013-03-05T12:55:34.153 回答