我的Java程序中发生了类似的事情:
void f(Object o) {
g(o);
}
<T extends MySuperClass & MyInterface> void g(T x) {
...;
}
我怎样才能使它起作用?如果不使用泛型,似乎无法在变量声明中同时指定基类和接口。我不认为泛型在这里会起作用,因为o是使用反射动态创建的,因此在编译时不知道其实际类。
(是的,我知道这是一件很奇怪的事情。但是实际上,我确实需要超类和接口的功能。我想我可以在运行时使用instanceof进行所有类型检查,但这看起来像Java 1.4 ...)
最佳答案
似乎没有办法调用“原始”通用方法。但是您可以创建原始类型的对象(以下转换显然是不安全的):
void f(Object o) {
Caster<?> c = new Caster();
g(c.cast(o));
}
class Caster<T extends MySuperClass & MyInterface> {
public T cast(Object o) {
return (T) o;
}
}