为什么Java的Method类不通用?

时间:2009-05-28 17:53:51

标签: java generics reflection

这将允许invoke方法具有正确的返回类型。例如:

class Method<T> {
    T invoke(Object obj, Object... args);
}

2 个答案:

答案 0 :(得分:2)

在Java中,泛型仅在编译时可用。您无法在运行时确定通用类型。这允许泛型实现向后兼容旧版本的JVM。

由于泛型仅在编译时可用,如果您知道类的类型,则不需要使用反射。

答案 1 :(得分:1)

在擦除的返回类型上使Method通用是不合理的。然而,这将是很多努力而收益甚微。反射的本质是你在编译时不知道类型 - 否则你可以静态链接。

我想在某些情况下甚至可以添加新的API以便返回泛型类型。该信息仍在该方法上,但不是来自您传递给它的实例。