我的 Java 程序中发生了类似的事情:
void f(Object o) {
g(o);
}
<T extends MySuperClass & MyInterface> void g(T x) {
...;
}
我如何转换 o 才能使其起作用?如果不使用泛型,似乎无法在变量声明中同时指定基类和接口(interface)。我认为泛型在这里不起作用,因为 o 是使用反射动态创建的,所以它的实际类在编译时是未知的。
(是的,我知道这是一件奇怪的事情。但我实际上确实需要父类(super class)和接口(interface)的功能。我想我可以在运行时使用 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;
}
}
关于Java:如何编写指定父类(super class)和接口(interface)的强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2307938/