返回类型的泛型的方法对象?

时间:2015-09-26 17:08:27

标签: java generics

有没有办法在Java中使用Method类的泛型?我想在Method对象上调用invoke()并让它返回方法的实际返回类型而不是Object

2 个答案:

答案 0 :(得分:2)

您无法扩展Method,因为虽然它不是final,但它没有可访问的构造函数。

你可以使用构图来做这样的事情。

public final class MyMethod<T> {

    private final Method method;

    public MyMethod(Method method) {
        this.method = method;
    }

    public T invoke(Object o, Object... args) throws IllegalAccessException, InvocationTargetException {
        return (T) method.invoke(o, args);      // Unchecked cast
    }
}

您可以像这样使用

MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));

但是,这并不好(例如未经检查的强制转换和已检查的异常)。

我怀疑这是一个XY问题。关于你究竟需要什么的一些细节将使它更容易回答。

答案 1 :(得分:1)

正如JB Nizet所说,你无法改变JRE方法,但是你可以在执行之前,执行之后或者执行之前做一些事情,并且可以改变AOP技术方法返回的返回值/ Object aspectJ,spring aop,谷歌它将成为你的朋友