Java 返回类型为泛型的方法对象?
在Java中,有没有办法将泛型与类一起使用?我想调用Method对象,让它返回方法的实际返回类型,而不是。正如JB Nizet所说的,你不能更改JRE方法,但你可以在执行之前、执行之后或执行前后做一些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,您可以更改使用AOP技术(如aspectJ、spring AOP、google it)的方法返回的返回值/对象它将是您的朋友您不能扩展Java 返回类型为泛型的方法对象?,java,generics,Java,Generics,在Java中,有没有办法将泛型与类一起使用?我想调用Method对象,让它返回方法的实际返回类型,而不是。正如JB Nizet所说的,你不能更改JRE方法,但你可以在执行之前、执行之后或执行前后做一些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring AOP、google it它将是你的朋友,正如JB Nizet所说,你不能更改JRE方法,但你可以在执行前、执行后或执行前后做些事情,你可以用AOP技术更改方法返回的返回值/对象,比如aspectJ、spring
方法
,因为尽管它不是最终的
,但它没有可访问的构造函数
你可以用合成来做类似的事情
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{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它
MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)
我怀疑这是一个XY问题。关于您究竟需要它做什么的一些详细信息将使回答更容易。您不能扩展
方法
,因为尽管它不是最终的
,但它没有可访问的构造函数
你可以用合成来做类似的事情
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{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它
MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)
我怀疑这是一个XY问题。关于您究竟需要它做什么的一些详细信息将使回答更容易。您不能扩展
方法
,因为尽管它不是最终的
,但它没有可访问的构造函数
你可以用合成来做类似的事情
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{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它
MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)
我怀疑这是一个XY问题。关于您究竟需要它做什么的一些详细信息将使回答更容易。您不能扩展
方法
,因为尽管它不是最终的
,但它没有可访问的构造函数
你可以用合成来做类似的事情
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{
私人最终方法;
公共MyMethod(方法){
这个方法=方法;
}
公共T调用(对象o,对象…参数)抛出IllegalAccessException,InvocationTargetException{
return(T)method.invoke(o,args);//未选中强制转换
}
}
你可以这样使用它
MyMethod<Integer> myMethod = new MyMethod<>(BigInteger.class.getMethod("intValue"));
Integer a = myMethod.invoke(new BigInteger("42"));
MyMethod-MyMethod=newmymethod(biginger.class.getMethod(“intValue”);
整数a=myMethod.invoke(新的BigInteger(“42”);
但是,这并不好(例如,未经检查的强制转换和已检查的异常)
我怀疑这是一个XY问题。关于您到底需要它做什么的一些细节将使回答更容易。嗯,invoke()的返回类型是Object,除了替换JDK开发团队的负责人Brian Goetz并决定在Java 9中对其进行更改外,没有其他方法可以改变这一点。您不能在Java中更改方法。无法将非泛型方法变为泛型。@JBNizet由于没有其他选择,您可以将其作为答案发布吗?嗯,invoke()的返回类型是Object,除了替换JDK开发团队的负责人Brian Goetz并决定在Java 9中对其进行更改外,没有其他方法可以更改它。您不能在Java中更改方法。无法将非泛型方法变为泛型。@JBNizet由于没有其他选择,您可以将其作为答案发布吗?嗯,invoke()的返回类型是Object,除了替换JDK开发团队的负责人Brian Goetz并决定在Java 9中对其进行更改外,没有其他方法可以更改它。您不能在Java中更改方法。没有办法使非泛型方法变为通用方法