传递班级<! - ?扩展T - >作为参数

时间:2014-02-27 14:49:40

标签: java generics reflection

这是一些代码,我希望能让你理解我想要的东西。它当然不起作用。

public static <T> void foo(Class<? extends T> type, AsyncCallback<T> callback){
    /*do something */
}



public void MyMethod() {
    Class a;
    if (isSomething()) {
        a = "some class";
    } else if (isSomething2()){
        a = "some other class";
    }
    /* probably more of this or even a switch*/
    useFoo(a);
}

public void useFoo(Class a){
    foo(a.class, AsyncCallback<a> {
        /* some callback */
    });
}       

方法foo已经存在,我需要从MyMethod动态使用它。目前,MyMethod中的每个不同的if语句都有一个useFoo。我想只有一个用一些参数调用的useFoo。原因是回调是一段冗长的代码,需要在每次调用该方法时重复。如何在不改变foo方法的情况下完成此操作?我希望你理解我的问题。谢谢。

3 个答案:

答案 0 :(得分:1)

我相信这就是你要找的东西:

public <T> void useFoo(T a) {
    foo(a);
    // do other stuff
}

答案 1 :(得分:0)

您还可以在静态函数中声明特定的T类型,如下所示:

ClassName.<ConcreteTType>foo(tObject.class, callbackstuff);

答案 2 :(得分:0)

如果其余代码与上面相同,您可以将useFoo方法编写为:

public <T> void useFoo(Class<T> a) {
    foo(a, new AsyncCallback<T>() {
        /* some callback */
    });
}