java – 使用反射和泛型时的警告

我该如何重写:

<T> T callMethod(String methodName,Object[] parameters) throws ... {
    ...
    return (T) SomeClass.class.getDeclaredMethod(methodName,parameterTypes).invoke(binding,parameters);
}

所以它不会产生警告

warning: [unchecked] unchecked cast
        return (T) SomeClass.class.getDeclaredMethod(methodName,parameters);
required: T
found:    Object
where T is a type-variable:
T extends Object declared in method <T>callMethod(String,Object[])

我的意思是无SupressWarnings解决方案.

解决方法

正如Peter Lawrey pointed out

There is no way the compiler can determine at compile time that the
method you select at runtime will have the return type of T.

我会更进一步说,callMethod根本不应该是一个通用的方法.由于调用者通过将其名称作为字符串传递来决定调用哪个方法,因此该方法应该只返回Object – 就像调用一样 – 并强制调用调用站点.

不要使用@SuppressWarnings – 这里没有办法证明这一点.

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...