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.Buta.run()
不起作用。类
没有运行
方法。但该类的实例可以有运行
方法。public void useFoo(最终类A){foo(A,new AsyncCallback(){public void onSuccess(T result){try{A.newInstance().run();}catch(异常e){}}