Java:如何编写指定父类(super class)和接口(interface)的强制转换?

标签 java interface casting generics superclass

我的 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/

相关文章:

java - spring mvc登录后重定向到主页

java - 如何将包含转换为 equals.ignorecase?

java - 为什么集合框架中没有堆栈接口(interface)?

java - 用于在不使用控制逻辑的情况下执行算术运算的通用 Java 代码

c++ - 是否可以将 double 数组转换为 char *?

java - 转换为递归有界类型

java - 将 Docker 的 splunk 日志驱动程序拆分为多个索引

go - 在 Go 中,如何检查接口(interface)是否实现了结构的所有导出方法?

java - 如何在java中划分两个长变量

java - jackson : field serialization format depending on other field value