Java 通过等级<;?扩展T>;作为参数

Java 通过等级<;?扩展T>;作为参数,java,generics,reflection,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"; } e

这是一些代码,我希望让你了解我想要什么。当然,它不起作用

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 */
    });
}       

publicstaticvoidfoo(Class我相信这就是你想要的:

public <T> void useFoo(T a) {
    foo(a);
    // do other stuff
}
publicsvoidusefoo(ta){
傅(甲),;
//做其他事情
}

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

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

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

public <T> void useFoo(Class<T> a) {
    foo(a, new AsyncCallback<T>() {
        /* some callback */
    });
}
public void useFoo(a类){
foo(一个新的AsyncCallback(){
/*一些回调*/
});
}

您需要将
useFoo()
方法设置为泛型。泛型只能在
之间使用引用类型名称,而不能引用自身。但是,我似乎无法调用传递给它的类中的方法。例如,在回调中,我当前有public void onSuccess(t result){class.run();}它要求我手动强制转换类你的意思是
a.run()
a
有类型
class
,类型
class
的对象没有方法
run()
。也许您需要发布一个更完整的示例。我的意思是,如何调用useFoo类中存在的run方法。在您的示例中,它是a.But
a.run()
不起作用。
没有
运行
方法。但该类的实例可以有
运行
方法。
public void useFoo(最终类A){foo(A,new AsyncCallback(){public void onSuccess(T result){try{A.newInstance().run();}catch(异常e){}}