答案 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,谷歌它将成为你的朋友